2013-11-09 3 views
1

Я наблюдаю событие catalog_product_collection_load_before и пытается отфильтровать коллекцию продуктов на основе его type_id. Тем не менее, я продолжаю получать Колонка не найдена: 1054 Неизвестный столбец 'e.type_id' in 'where clause ошибка.Невозможно фильтровать коллекцию товаров по типу_ид

Код выглядит так:

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

Я даже пытался сделать его более простым, как это, но до сих пор не работает.

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

Он работает с другими атрибутами, такими как цена, имя, сущность_ид, но не тип_ид. Почему это?

+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(). Когда вы вызываете один из этих методов дважды, вы делаете операцию И. Мне нужна операция ИЛИ. – 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, приведенный выше код работает хорошо для меня.

Пожалуйста, попробуйте это.

Смежные вопросы