Question

Je dois trouver un moyen de trouver tous les produits programatically bundle contenant un produit particulier simple. J'espère qu'il ya une solution simple à ce problème comme je l'ai été incapable de la figure d'un moi-même.

Était-ce utile?

La solution

Ce qui suit devrait vous aider à démarrer. Ce n'est pas la façon la plus performante de le faire - nous chargeons une collection de produits groupés, obtenir les identifiants des enfants, puis vérifier ces ID pour ce que nous voulons. Cependant, il devrait être adapté aux besoins de scripts shell, certains besoins des magasins frontend, et devrait vous donner des pointeurs vers aller chercher ces informations d'une manière plus performante en examinant comment les méthodes de base vont chercher les données (les modèles de ressources, conduisant à quelles tables) .

Testé dans Magento CE 1.7.0.1

function findBundledProductsWithThisChildProduct($id_to_find)
{
    //grab all bundled products
    $bundles = array();
    $products = Mage::getModel('catalog/product')
    ->getCollection()
    ->addFieldToFilter('type_id','bundle');

    //loop over bundled products
    foreach($products as $product)
    {

        //get child product IDs
        $children_ids_by_option = $product
        ->getTypeInstance($product)
        ->getChildrenIds($product->getId(),false); //second boolean "true" will return only
                                                   //required child products instead of all          

        //flatten arrays (which are grouped by option)  
        $ids = array();
        foreach($children_ids_by_option as $array)
        {
            $ids = array_merge($ids, $array);
        }

        //perform test and add to return value
        if(in_array($id_to_find, $ids))
        {
            $bundles[] = $product;
        }
    }

    return $bundles;
}

//usage
$products = findBundledProductsWithThisChildProduct($simple_product_id);
foreach($products as $product)
{
    var_dump($product->getData());
}

Autres conseils

Je sais que cela est trop après le fait d'être utile pour vous, mais pour les futurs chercheurs ...

réponse de base janw est juste, mais une autre façon de faire magento-ey il serait:

$parentIds = Mage::getResourceSingleton('bundle/selection')->getParentIdsByChild($product->getId());

vous pouvez alors charger une collection de produits de filtrage sur les ids.

J'ai vu la réponse de Alan Storm. Mais si je l'ai déjà 100 produits bundle. Ensuite, vous devez faire une boucle sur tous ceux: (

je me suis dit de trouver un moyen d'interroger ceci:

<?php
function get_bundle_product_by_simple_id($id) {
    $read= Mage::getSingleton('core/resource')->getConnection('core_read');

    // fetch read database connection that is used in Mage_Core module
    $read = Mage::getSingleton('core/resource')->getConnection('core_read');

    $query = sprintf("SELECT `parent_product_id` FROM `catalog_product_bundle_selection` WHERE `product_id` = '%s'",
            htmlspecialchars( stripslashes( $id ) )
        );
    $value=$read->query( $query );
    $row = $value->fetch();

    if( is_null($row) ) {
        return $row;
    }
    return $row['parent_product_id'];
}

Je assez nouveau pour Magento, donc il pourrait y avoir de meilleures façons. Ou raisons de ne pas faire du tout. Principalement la fuite / décapage de la $id

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top