2012-01-19 7 views
3

選択肢のコレクションを取得しようとしていますが、親商品のIDでフィルタリングしています。コレクションには属性parent_product_idが含まれていますが、明らかにこれは機能していません...フィルタは考慮されていません。Magentoバンドルアイテムが親IDでフィルタリングする

これは私がこれまで持っているものです。

$children = Mage::getResourceModel('bundle/selection_collection') 
    ->addAttributeToSelect(array('product_id', 'selection_price_value')) 
    ->setStoreId(Mage::app()->getStore()->getId()) 
    ->addAttributeToFilter('parent_product_id',$item->getProductId()); 

それはとてもフィルタなしで、すべての選択のコレクションを返します。特定のバンドル製品を選択する方法はありますか?私は理由のためにこのメソッドを使用していることに注意してください...それは親のIDにのみ基づいている必要があります。 phpMyAdminにであなたのフィルタが本当にそこ(WHERE句内)であれば

$sql = Mage::getResourceModel('bundle/selection_collection')->getSelect()->__toString(); 
Mage::log($sql);` 

チェックして、データベースに対して抽出されたSQLクエリを実行します(:

+0

ルックはまだ答えを持っていませんか? – ShaunOReilly

+0

まだ...「ハック」はおそらく機能しますが、私はまだエレガントなソリューションを望んでいます。 – JNDPNT

答えて

3

私は、クエリがコレクションで構成されているかチェックすることをお勧めシェルへのアクセス権がある場合はmysql-client)。問題の原因がわかるはずです。

また汚い方法を試みることができる、と混乱は、コレクションのZend_Select対象聖霊降臨祭:次のことを試してみてください

$collection = Mage::getResourceModel('bundle/selection_collection') 
    ->addAttributeToSelect(array('product_id', 'selection_price_value')) 
    ->setStoreId(Mage::app()->getStore()->getId()); 
$collection->getSelect()->where('`selection`.`parent_product_id` = '.$item->getProductId()); 
+0

ええ、私はそれを使用することができますが、私は本当に正しいMagentoのやり方をしたいと思っています...これはmagentoが失敗したときのハックですが、通常の属性フィルタが動作しなければならないようです。もちろん、クエリ文字列はすでにテストされており、parent_product_idのwhere節は追加されません。 – JNDPNT

+1

EAVモデルを使用するか、ジョインするのは本当にハックです。フラットテーブルの - > where()を使用するのは、おそらくフラットなコレクションをフィルタリングする最良の方法です。 –

3

を:いくつかのフィールドが属性である

->addAttributeToSelect('*') //select all possible fields  
->addFieldToFilter('parent_product_id',array('eq' => $item->getProductId())); 

、他の人はちょうどですそのテーブル内のフィールド。

いくつかのサンプルについては、このファイルを見てみましょう。あなたのような /app/code/core/Mage/Bundle/Model/Product/Type.php