Dovresti essere in grado di combinare la maggior parte di queste tecniche per creare la query desiderata. Per le tabelle di vendita, probabilmente utilizzerai addFieldToFilter
, ma Zend_Db_Expr
è probabilmente il percorso di minor resistenza per te:
addAttributeToFilter:
Secondo il Wiki Magento : Quando si creano parentesi che presentano OR
condizioni, è possibile effettuare le seguenti operazioni:
Se viene passato un array ma non viene specificato alcun codice di attributo, verrà interpretato come un gruppo di condizioni OR che verranno elaborate allo stesso modo.
Quindi, da ciò possiamo costruire quanto segue:
$collection->addAttributeToFilter(
array(
array('attribute'=> 'someattribute','like' => 'value'),
array('attribute'=> 'otherattribute','like' => 'value'),
array('attribute'=> 'anotherattribute','like' => 'value'),
)
);
Ciò genererà una WHERE
clausola del formato:
WHERE ((someattribute LIKE 'value') OR (otherattribute LIKE 'value') OR (anotherattribute LIKE 'value'))
addFieldToFilter:
Nel caso in cui il modello sia direttamente collegato a una tabella DB, è necessario quanto segue per applicare condizionali alla colonna del database per nome:
$collection->addFieldToFilter(
array('title', 'content'),
array(
array('like'=>'%$titlesearchtext%'),
array('like'=>'%$contentsearchtext%')
)
)
Zend_Db_Expr:
Per costrutti molto più complicati puoi costruire la tua clausola where usando Zend_Db_Expr
. Per esempio :
$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)"));
Fonte :
/programming/5301231/addattributetofilter-and-or-condition-in-magentos-collection
/programming/3826474/magento-addfieldtofilter-two-fields-match-as-or-not-and/7851884#7851884