Domanda

Ho bisogno di trovare un modo per trovare programatically tutti i prodotti del bundle che contengono un particolare prodotto semplice. Spero ci sia una soluzione semplice a questo problema come mi è stato in grado di capire uno su me stesso.

È stato utile?

Soluzione

Il seguente dovrebbe iniziare. Questo non è il modo più performante per fare questo - stiamo carico una collezione di prodotti in bundle, ottenendo gli ID dei bambini, e poi controllando tali ID per quello che vogliamo. Tuttavia, dovrebbe essere adatto per le esigenze di scripting di shell, alcuni bisogni negozio frontend, e dovrebbe darvi puntatori verso il recupero queste informazioni in modo più performante esaminando come i metodi fondamentali recuperare i dati (cioè quali modelli di risorse, che porta a quali tabelle) .

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

Altri suggerimenti

So che questo è troppo dopo il fatto di essere utile a voi, ma per il futuro i ricercatori ...

risposta di base

di janw è giusto, ma un altro Magento-ey modo per farlo potrebbe essere:

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

allora si può caricare il filtraggio su quelle ids una collezione di prodotti.

ho visto la risposta di Alan Storm. Ma cosa succede se ho già avere 100 prodotti fascio. Poi si avrebbe bisogno di un ciclo su tutti coloro che: (

I trovato un modo per interrogare questo:

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

I abbastanza nuovo per Magento, quindi ci potrebbe essere modi migliori. O ragioni per non farlo affatto. Principalmente la fuga / spogliando il $id

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top