2

catalog_product_collection_load_beforeイベントを観察し、その type_id に基づいて製品コレクションをフィルタリングしようとしています。ただし、Column not found: 1054 Unknown column 'e.type_id' in 'where clause error. が発生し続けます。

コードは次のようになります。

$observer->getCollection()->addFieldToFilter(array(
    array(
        'attribute' => 'price',
        'eq'      => '20',
        ),
    array(
        'attribute' => 'type_id',
        'neq'       => 'simple',
        ),
    ));

このようにもっとシンプルにしようとさえしましたが、それでもうまくいきません。

$observer->getCollection()->addFieldToFilter('type_id','simple');

price、name、entity_id などの他の属性では機能しますが、type_id では機能しません。何故ですか?

4

3 に答える 3

3

コレクションでこのコードを試してください。

$collection->getSelect() ->joinInner(array(’cpe’ => ‘catalog_product_entity’),’e.entity_id = cpe.entity_id’) ->where("cpe.type_id = ‘simple’");

を使用しないでくださいaddAttributeToFilter。価格でフィルタリングすると、メイン テーブルが になりcatalog_product_index_price、 でフィルタリングできるためtype_id、上記のコードはうまく機能します。

これを試してください。

于 2014-04-27T16:25:06.463 に答える
0

以下のコードを試してみてください。

$observer = Mage::getModel('catalog/product')->getCollection()
    ->addAttributeToSelect('*')
    ->addAttributeToFilter('type_id', array('eq' => 'simple'))
    ->addFieldToFilter(
        array(
          array(
           'attribute' => 'price',
           'eq'      => '20',
          )
        )
    )
    ->load();
于 2013-11-11T07:00:16.907 に答える
0

うまくいく場合は、以下のコードを試してください。

$observer = Mage::getModel('catalog/product')->getCollection()
    ->addAttributeToSelect('*')
    ->addAttributeToFilter('type_id', array('eq' => 'simple'))->load();
于 2013-11-09T12:44:57.433 に答える