2013-11-09 77 views
1

我在观察catalog_product_collection_load_before事件,并尝试根据其type_id过滤产品集合。但是,我不断收到未找到列:1054未知列'e.type_id'中的where子句错误。无法按type_id过滤产品集合

的代码是这样的:

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

我甚至试图使它更简单的这样,但仍然无法正常工作。

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

它适用于其他属性,如价格,名称,entity_id,但不是type_id。这是为什么?

+0

你有没有找到解决办法? –

回答

0

试试下面的代码,如果你的作品:

$observer = Mage::getModel('catalog/product')->getCollection() 
    ->addAttributeToSelect('*') 
    ->addAttributeToFilter('type_id', array('eq' => 'simple'))->load(); 
+0

我得到**致命错误:达到'100'的最大功能嵌套级别,正在中止!**错误。最后一个堆栈是** Mage_Core_Model_Store-> getId().. \ Store.php:673 **。这甚至不适用于任何其他属性,如名称,价格。 – user2880076

0

尝试下面的代码,它可以帮助你:

$observer = Mage::getModel('catalog/product')->getCollection() 
    ->addAttributeToSelect('*') 
    ->addAttributeToFilter('type_id', array('eq' => 'simple')) 
    ->addFieldToFilter(
     array(
      array(
      'attribute' => 'price', 
      'eq'  => '20', 
     ) 
     ) 
    ) 
    ->load(); 
+0

addAttributeToFilter和addFieldToFilter基本上是相同的方法,因为在Varien_Data_Collection_Db中,addFieldToFilter()被映射到addAttributeToFilter()。当你两次调用这两种方法中的一种时,你正在进行AND运算。我需要OR操作。 – user2880076

1

尝试这段代码的集合。

$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,上面的代码很适合我。

请试试这个。