คุณควรจะรวมเทคนิคเหล่านี้ส่วนใหญ่เพื่อสร้างแบบสอบถามที่คุณต้องการ สำหรับตารางการขายคุณอาจใช้addFieldToFilter
- แต่Zend_Db_Expr
มีแนวโน้มว่าจะมีความต้านทานน้อยที่สุดสำหรับคุณ:
addAttributeToFilter:
ตาม Magento Wiki : เมื่อสร้าง parentheticals ที่มี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:
ในกรณีที่โมเดลเชื่อมโยงโดยตรงกับตาราง DB จำเป็นต้องใช้สิ่งต่อไปนี้สำหรับการใช้เงื่อนไขกับคอลัมน์ฐานข้อมูลตามชื่อ:
$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