Comment créer une multi-condition dans addAttributeToFilter?
Je veux aboutir à une requête SQL comme celle-ci (image jointe):
WHERE ((`e`.`news_from_date` > '2013-09-12') OR (`e`.`news_to_date` < '2013-09-12'))
AND ((((`e`.`special_price` IS NULL))) OR (((`e`.`special_price` IS NOT NULL)) AND ((`e`.`special_from_date` < '2013-09-12') OR (`e`.`special_to_date` > '2013-09-12'))))
$collection->addAttributeToFilter('special_price', array('null'=>'special_price'), 'left');
Je vous remercie
Réponses:
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
- maisZend_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:Donc, à partir de cela, nous pouvons construire ce qui suit:
Cela produira une
WHERE
clause du format: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:
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 :La source :
/programming/5301231/addattributetofilter-and-or-condition-in-magentos-collection
/programming/3826474/magento-addfieldtofilter-two-fields-match-as-or-not-and/7851884#7851884
la source
Zend_Db_Expr
:$collection->getSelect()->where(new Zend_Db_Expr("(CONDITION_1 OR (CONDITION_2 AND (CONDITION_3 OR CONDITION_4)))"));
name
,altnernate_name
,description
) et je voudrais savoir quand un résultat est dû au fait de l'description
attribut.Si vous voulez inclure ET avec la combinaison de OU alors
la source
Ou conditionner en utilisant addFieldToFilter
la source