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 dies Zend_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:
Wird ein Array übergeben, aber kein Attributcode angegeben, wird es als Gruppe von OR-Bedingungen interpretiert, die auf die gleiche Weise verarbeitet werden.
Daraus können wir also folgendes konstruieren:
$collection->addAttributeToFilter(
array(
array('attribute'=> 'someattribute','like' => 'value'),
array('attribute'=> 'otherattribute','like' => 'value'),
array('attribute'=> 'anotherattribute','like' => 'value'),
)
);
Dies gibt eine WHERE
Klausel des Formats aus:
WHERE ((someattribute LIKE 'value') OR (otherattribute LIKE 'value') OR (anotherattribute LIKE 'value'))
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:
$collection->addFieldToFilter(
array('title', 'content'),
array(
array('like'=>'%$titlesearchtext%'),
array('like'=>'%$contentsearchtext%')
)
)
Zend_Db_Expr:
Für viel kompliziertere Konstrukte können Sie Ihre eigene where-Klausel mit erstellen Zend_Db_Expr
. Zum Beispiel :
$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)"));
Quelle :
/programming/5301231/addattributetofilter-and-condition-in-magentos-collection
/programming/3826474/magento-addfieldtofilter-two-fields-match-as-or-not-and/7851884#7851884