我正在观察 catalog_product_collection_load_before 事件并尝试根据其type_id过滤产品集合。但是,我一直在未找到列:1054未知列'e.type_id'在'where子句错误。
代码是这样的:
$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。那是为什么?
答案 0 :(得分:2)
在集合中尝试这段代码。
$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
进行过滤,以上代码效果很好对我来说。
请试一试。
答案 1 :(得分:0)
如果适用于您,请尝试以下代码:
$observer = Mage::getModel('catalog/product')->getCollection()
->addAttributeToSelect('*')
->addAttributeToFilter('type_id', array('eq' => 'simple'))->load();
答案 2 :(得分:0)
尝试以下代码,它可以帮助您:
$observer = Mage::getModel('catalog/product')->getCollection()
->addAttributeToSelect('*')
->addAttributeToFilter('type_id', array('eq' => 'simple'))
->addFieldToFilter(
array(
array(
'attribute' => 'price',
'eq' => '20',
)
)
)
->load();