Ви повинні мати можливість поєднувати більшість цих методів, щоб створити потрібний запит. Для таблиць продажів ви, ймовірно, будете використовувати, addFieldToFilter
але Zend_Db_Expr
це, ймовірно, шлях найменшого опору для вас:
addAttributeToFilter:
Відповідно до Magento Wiki : Під час створення дужок, які мають 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:
Для набагато складніших конструкцій ви можете створити свій власний, де використовується застереження 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