Bạn sẽ có thể kết hợp hầu hết các kỹ thuật này để tạo truy vấn bạn muốn. Đối với các bảng doanh số, có thể bạn sẽ sử dụng addFieldToFilter
- nhưng Zend_Db_Expr
có thể là con đường ít kháng cự nhất đối với bạn:
addAttributionToFilter:
Theo Magento Wiki : Khi tạo các ngoặc đơn có OR
điều kiện, bạn có thể làm như sau:
Nếu một mảng được thông qua nhưng không có mã thuộc tính được chỉ định, nó sẽ được hiểu là một nhóm các điều kiện OR sẽ được xử lý theo cùng một cách.
Vì vậy, từ đó chúng ta có thể xây dựng như sau:
$collection->addAttributeToFilter(
array(
array('attribute'=> 'someattribute','like' => 'value'),
array('attribute'=> 'otherattribute','like' => 'value'),
array('attribute'=> 'anotherattribute','like' => 'value'),
)
);
Điều này sẽ xuất ra một WHERE
mệnh đề của định dạng:
WHERE ((someattribute LIKE 'value') OR (otherattribute LIKE 'value') OR (anotherattribute LIKE 'value'))
addFieldToFilter:
Trong trường hợp mô hình được liên kết trực tiếp với bảng DB, thì cần có các điều kiện sau để áp dụng các điều kiện cho cột cơ sở dữ liệu theo tên:
$collection->addFieldToFilter(
array('title', 'content'),
array(
array('like'=>'%$titlesearchtext%'),
array('like'=>'%$contentsearchtext%')
)
)
Zend_Db_Expr:
Đối với các cấu trúc phức tạp hơn nhiều, bạn có thể xây dựng mệnh đề where của riêng mình bằng cách sử dụng Zend_Db_Expr
. Ví dụ :
$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)"));
Nguồn:
/programming/5301231/addattributetofilter-and-or-condition-in-magentos-collection
/programming/3826474/magento-addfieldtofilter-two-fields-match-as-or-not-and/7851884#7851884