Вы должны быть в состоянии объединить большинство из этих методов, чтобы создать нужный запрос. Для таблиц продаж вы, вероятно, будете использовать addFieldToFilter
- но Zend_Db_Expr
, скорее всего, путь наименьшего сопротивления для вас:
addAttributeToFilter:
Согласно Magento Wiki : При создании круглых скобок, которые имеют OR
условия, вы можете сделать следующее:
Если массив передан, но код атрибута не указан, он будет интерпретирован как группа условий OR, которые будут обрабатываться таким же образом.
Итак, из этого мы можем построить следующее:
$collection->addAttributeToFilter(
array(
array('attribute'=> 'someattribute','like' => 'value'),
array('attribute'=> 'otherattribute','like' => 'value'),
array('attribute'=> 'anotherattribute','like' => 'value'),
)
);
Это выведет WHERE
предложение формата:
WHERE ((someattribute LIKE 'value') OR (otherattribute LIKE 'value') OR (anotherattribute LIKE 'value'))
addFieldToFilter:
В случае, когда модель напрямую связана с таблицей БД, для применения условных выражений к столбцу базы данных по имени требуется следующее:
$collection->addFieldToFilter(
array('title', 'content'),
array(
array('like'=>'%$titlesearchtext%'),
array('like'=>'%$contentsearchtext%')
)
)
Zend_Db_Expr:
Для гораздо более сложных конструкций вы можете создать свой собственный оператор where Zend_Db_Expr
. Например :
$collection->getSelect()->where(new Zend_Db_Expr("(e.created_at > '2013-01-01 00:00:00' OR e.created_at <'2012-01-01 00:00:00)"));
Источник :
/programming/5301231/addattributetofilter-and-or-condition-in-magentos-collection
/programming/3826474/magento-addfieldtofilter-two-fields-match-as-or-not-and/7851884#7851884