Wie erstelle ich eine Multi-Bedingung in addAttributeToFilter?
Ich möchte folgende SQL-Abfrage erhalten (Bild angehängt):
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');
Vielen Dank
Antworten:
Sie sollten in der Lage sein, die meisten dieser Techniken zu kombinieren, um die gewünschte Abfrage zu erstellen. Für Verkaufstische werden Sie wahrscheinlich verwenden
addFieldToFilter
- aber diesZend_Db_Expr
ist wahrscheinlich der Weg des geringsten Widerstands für Sie:addAttributeToFilter:
Laut Magento Wiki : Wenn Sie Klammern mit
OR
Bedingungen erstellen, können Sie Folgendes tun:Daraus können wir also folgendes konstruieren:
Dies gibt eine
WHERE
Klausel des Formats aus:addFieldToFilter:
In dem Fall, in dem das Modell direkt mit einer DB-Tabelle verknüpft ist, ist Folgendes erforderlich, um Bedingungen namentlich auf die Datenbankspalte anzuwenden:
Zend_Db_Expr:
Für viel kompliziertere Konstrukte können Sie Ihre eigene where-Klausel mit erstellen
Zend_Db_Expr
. Zum Beispiel :Quelle :
/programming/5301231/addattributetofilter-and-condition-in-magentos-collection
/programming/3826474/magento-addfieldtofilter-two-fields-match-as-or-not-and/7851884#7851884
quelle
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
) und würde gerne wissen , wenn ein Ergebnis aufgrund der istdescription
Attribut.Wenn Sie UND mit der Kombination von ODER einschließen möchten, dann
quelle
Oder bedingen Sie mit addFieldToFilter
quelle