質問

特定のシンプルな製品を含むすべてのバンドル製品をプログラム的に見つける方法を見つける必要があります。私は自分自身を理解することができなかったので、この問題が簡単な解決策があることを望んでいます。

役に立ちましたか?

解決

以下はあなたを始めるべきです。これはこれを行うための最もパフォーマンスのある方法ではありません。バンドルされた製品のコレクションをロードし、子供のIDを取得し、その後、必要なものをチェックしています。ただし、シェルスクリプトのニーズ、いくつかのフロントエンドストアのニーズに適している必要があり、コアメソッドがデータを取得する方法を調べることにより、よりパフォーマンスのある方法でこの情報を取得するためのポインターを提供する必要があります(つまり、どのリソースモデル、テーブルにつながるリソースモデル) 。

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

他のヒント

私はこれもあなたにとって有用であるという事実の後の方法であることを知っていますが、将来の検索者にとって...

Janwの基本的な答えは正しいですが、それを行うためのよりマゼントーイの方法は次のとおりです。

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

次に、これらのIDに製品コレクションフィルタリングをロードできます。

アラン・ストームの答えを見ました。しかし、すでに100個のバンドル製品がある場合はどうなりますか。そうすれば、それらすべてをループする必要があります:(

私はこれを照会する方法を見つけました:

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

私はMagentoにかなり新しいので、より良い方法があるかもしれません。またはこれをまったくしない理由。主に脱出/剥ぎ取り $id

ライセンス: CC-BY-SA帰属
所属していません magento.stackexchange
scroll top