2

我正在观察catalog_product_collection_load_before事件并尝试根据其 type_id 过滤产品集合。但是,我不断收到Column not found: 1054 Unknown column 'e.type_id' in 'where 子句错误。

代码是这样的:

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

我什至试图让它像这样更简单,但仍然不起作用。

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

它适用于其他属性,例如价格、名称、实体 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 回答