Anda harus dapat menggabungkan sebagian besar teknik ini untuk membuat kueri yang Anda inginkan. Untuk tabel penjualan, Anda mungkin akan menggunakan addFieldToFilter
- tetapi Zend_Db_Expr
kemungkinan jalur resistensi paling rendah untuk Anda:
addAttributeToFilter:
Menurut Wiki Magento : Saat membuat tanda kurung yang memiliki OR
kondisi Anda dapat melakukan hal berikut:
Jika sebuah array dilewatkan tetapi tidak ada kode atribut yang ditentukan, itu akan ditafsirkan sebagai sekelompok kondisi ATAU yang akan diproses dengan cara yang sama.
Jadi, dari situ kita dapat membuat yang berikut:
$collection->addAttributeToFilter(
array(
array('attribute'=> 'someattribute','like' => 'value'),
array('attribute'=> 'otherattribute','like' => 'value'),
array('attribute'=> 'anotherattribute','like' => 'value'),
)
);
Ini akan menghasilkan WHERE
klausa format:
WHERE ((someattribute LIKE 'value') OR (otherattribute LIKE 'value') OR (anotherattribute LIKE 'value'))
addFieldToFilter:
Dalam kasus di mana model terhubung langsung ke tabel DB, berikut ini diperlukan untuk menerapkan persyaratan ke kolom database dengan nama:
$collection->addFieldToFilter(
array('title', 'content'),
array(
array('like'=>'%$titlesearchtext%'),
array('like'=>'%$contentsearchtext%')
)
)
Zend_Db_Expr:
Untuk konstruksi yang jauh lebih rumit, Anda dapat membuat klausa sendiri di mana menggunakan Zend_Db_Expr
. Contohnya :
$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)"));
Sumber:
/programming/5301231/addattributetofilter-and-or-condition-in-magentos-collection
/programming/3826474/magento-addfieldtofilter-two-fields-match-as-or-not-and/7851884#7851884