2013-11-09 109 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,上面的代碼很適合我。

請試試這個。