Vous devriez pouvoir combiner la plupart de ces techniques pour créer la requête souhaitée. Pour les tableaux de vente, vous utiliserez probablement addFieldToFilter
- mais Zend_Db_Expr
c'est probablement le chemin de moindre résistance pour vous:
addAttributeToFilter:
Selon le Wiki Magento : lors de la création de parenthèses qui ont des OR
conditions, vous pouvez effectuer les opérations suivantes:
Si un tableau est transmis mais qu'aucun code d'attribut n'est spécifié, il sera interprété comme un groupe de conditions OR qui seront traitées de la même manière.
Donc, à partir de cela, nous pouvons construire ce qui suit:
$collection->addAttributeToFilter(
array(
array('attribute'=> 'someattribute','like' => 'value'),
array('attribute'=> 'otherattribute','like' => 'value'),
array('attribute'=> 'anotherattribute','like' => 'value'),
)
);
Cela produira une WHERE
clause du format:
WHERE ((someattribute LIKE 'value') OR (otherattribute LIKE 'value') OR (anotherattribute LIKE 'value'))
addFieldToFilter:
Dans le cas où le modèle est directement lié à une table de base de données, les éléments suivants sont requis pour appliquer des conditions à la colonne de base de données par nom:
$collection->addFieldToFilter(
array('title', 'content'),
array(
array('like'=>'%$titlesearchtext%'),
array('like'=>'%$contentsearchtext%')
)
)
Zend_Db_Expr:
Pour des constructions beaucoup plus compliquées, vous pouvez créer votre propre clause where en utilisant Zend_Db_Expr
. Par exemple :
$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)"));
La source :
/programming/5301231/addattributetofilter-and-or-condition-in-magentos-collection
/programming/3826474/magento-addfieldtofilter-two-fields-match-as-or-not-and/7851884#7851884