Frage

Ich muss einen Weg finden, um alle Bundle -Produkte zu finden, die ein bestimmtes einfaches Produkt enthalten. Ich hoffe, dass es eine einfache Lösung für dieses Problem gibt, da ich selbst keine herausfinden konnte.

War es hilfreich?

Lösung

Das Folgende sollte Ihnen den Einstieg bringen. Dies ist nicht die leistungsstärkste Art, dies zu tun - wir laden eine Sammlung von gebündelten Produkten, erhalten die Kinder -IDs und überprüfen dann diese IDs für das, was wir wollen. Es sollte jedoch für Shell -Skriptbedürfnisse und einige Frontend Store -Anforderungen geeignet sein und Ihnen Hinweise geben, um diese Informationen auf leistungsfähigere Weise zu holen, indem Sie untersuchen, wie die Kernmethoden die Daten abrufen (dh welche Ressourcenmodelle, die zu welchen Tabellen führen) .

Getestet in 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());
}

Andere Tipps

Ich weiß, dass dies auch viel nach der Tatsache ist, um für Sie nützlich zu sein, aber für zukünftige Suchende ...

Janws grundlegende Antwort ist richtig, aber ein magento-ey-Weg, dies zu tun, wäre:

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

Anschließend können Sie eine Produktsammelsfilterung auf diese IDs laden.

Ich sah die Antwort von Alan Storm. Aber was ist, wenn ich bereits 100 Bundle -Produkte habe? Dann müssten Sie all diese überschreiten :(

Ich habe einen Weg gefunden, dies abzufragen:

<?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'];
}

Ich bin ziemlich neu in Magento, also könnte es bessere Wege geben. Oder Gründe, dies überhaupt nicht zu tun. Hauptsächlich das entkommen/strippieren die $id

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top