Как создать мульти-условие в addAttributeToFilter?
Я хочу, чтобы результат в запросе SQL, как это (изображение прилагается):
WHERE ((`e`.`news_from_date` > '2013-09-12') OR (`e`.`news_to_date` < '2013-09-12'))
AND ((((`e`.`special_price` IS NULL))) OR (((`e`.`special_price` IS NOT NULL)) AND ((`e`.`special_from_date` < '2013-09-12') OR (`e`.`special_to_date` > '2013-09-12'))))
$collection->addAttributeToFilter('special_price', array('null'=>'special_price'), 'left');
Спасибо
Ответы:
Вы должны быть в состоянии объединить большинство из этих методов, чтобы создать нужный запрос. Для таблиц продаж вы, вероятно, будете использовать
addFieldToFilter
- ноZend_Db_Expr
, скорее всего, путь наименьшего сопротивления для вас:addAttributeToFilter:
Согласно Magento Wiki : При создании круглых скобок, которые имеют
OR
условия, вы можете сделать следующее:Итак, из этого мы можем построить следующее:
Это выведет
WHERE
предложение формата:addFieldToFilter:
В случае, когда модель напрямую связана с таблицей БД, для применения условных выражений к столбцу базы данных по имени требуется следующее:
Zend_Db_Expr:
Для гораздо более сложных конструкций вы можете создать свой собственный оператор where
Zend_Db_Expr
. Например :Источник :
/programming/5301231/addattributetofilter-and-or-condition-in-magentos-collection
/programming/3826474/magento-addfieldtofilter-two-fields-match-as-or-not-and/7851884#7851884
источник
Zend_Db_Expr
:$collection->getSelect()->where(new Zend_Db_Expr("(CONDITION_1 OR (CONDITION_2 AND (CONDITION_3 OR CONDITION_4)))"));
name
,altnernate_name
,description
) и хотел бы знать , когда результат из - заdescription
атрибута.Если вы хотите включить И с комбинацией ИЛИ, то
источник
Или условие, используя addFieldToFilter
источник