magento
Filtern von Sammlungen
Suche…
Parameter
Parameter | Einzelheiten |
---|---|
$ addFieldToFilter ( $ field , $ condition = null) | {string} Das Feld, das wir zum Filter hinzufügen. |
$ addFieldToFilter ($ field, $ condition = null ) | {mixed} Die Definition des Filters, den wir verwenden werden. |
addAttributeToFilter ( $ attr , $ condition = null, $ join = 'inner') | {string} Das Feld, das wir zum Filter hinzufügen. |
addAttributeToFilter ($ attr, $ condition = null , $ join = 'inner') | {mixed} Die Definition des Filters, den wir verwenden werden. |
addAttributeToFilter ($ attr, $ condition = null, $ join = 'inner' ) | {('inner', 'left')} Der Typ der SQL-Verknüpfung, die beim Verbinden der EAV-Tabelle verwendet wird. |
Bemerkungen
Vergleichsargumente filtern
Magento bietet auch eine flexible Möglichkeit zum Filtern mit Vergleichsoperatoren. Hier ist eine Liste der gültigen Operatoren und ihrer Syntax:
Alle Vergleichsargumente können an den zweiten Parameter der Methoden addFieldToFielter()
oder addAttributeToFilter()
werden.
$collection_of_products->addAttributeToFilter('visible',array("eq"=>1));
Vergleich | Argument-Array | Ergebnis SQL-Snippet |
---|---|---|
Gleich | array ("eq" => $ var) | WO (`my_field` = $ var) |
Nicht gleich | Array ("neq" => $ var) | WO (`my_field`! = $ Var) |
Mögen | Array ("like" => $ var) | WO (`my_field` wie $ var) |
Nicht wie | Array ("nlike" => $ var) | WO (`my_field` NICHT MÖGLICH $ var) |
Ist | Array ("ist" => $ var) | WO (`my_field` IST $ var) |
Im | Array ("in" => $ var) | WO (`my_field` IN ($ var)) |
Nicht in | Array ("nin" => $ var) | WO (`my_field` NICHT IN ($ var)) |
Null | Array ("null" => true) | WO ("my_field" ist NULL) |
Nicht null | array ("notnull" => true) | WO ("my_field" ist NICHT NULL) |
Größer als | Array ("gt" => $ var) | WO (`my_field`> $ var) |
Weniger als | Array ("lt" => $ var) | WO (`my_field` <$ var) |
Größer als oder gleich | Array ("gteq" => $ var) | WO (`my_field`> = $ var) |
Weniger als oder gleich | Array ("lteq" => $ var) | WO (`my_field` <= $ var) |
In Set finden | array ("finset" => array ($ var)) | WHERE (find_in_set ($ var, `mein_field`) |
Von und bis | Array ("von" => $ var1, "bis" => $ var2) | WO (`my_field`> = $ var1 UND` my_field` <= $ var2) |
Sammlungen filtern
Magento verfügt über leistungsstarke Methoden zum Filtern von Sammlungen. Da es zwei Arten von Objekten gibt, die in Sammlungen enthalten sein können, müssen wir zunächst festlegen, mit welchen Daten wir arbeiten, bevor wir sie filtern können. Magento implementiert ein EAV-Datenmodell für Entitäten wie Produkte und Kategorien. Es gibt verschiedene Methoden, wenn Sie eine Sammlung von EAV-Objekten filtern.
In Magento werden Bestellungen nicht als EAV-Objekte gespeichert. Dies macht die Auftragserfassung zu einem guten Beispiel für das Filtern einer Grundsammlung.
$collection_of_orders = Mage::getModel('sales/order')->getCollection();
$collection_of_orders->addFieldToFilter('status','processing');
Wenn wir uns die Produktsammlung ansehen, können wir feststellen, dass die Produkte in einem EAV-Datenmodell gespeichert sind. Wir können auch leicht nach EAV-Attributen filtern.
$collection_of_products = Mage::getModel('catalog/product')->getCollection();
$collection_of_products->addAttributeToFilter('visible',1);
Handhabung von ANDs und ORs in Filtern
Wenn wir unsere Daten abfragen, benötigen wir oft mehr als einen Filter, um genau den Datensatz zu erhalten, nach dem wir suchen. In SQL behandeln wir dies mit AND- und OR-Klauseln. Dasselbe können wir mit Kollektionen erreichen.
Um Ihrer Abfrage eine AND-Klausel hinzuzufügen, fügen Sie einfach einen weiteren Methodenaufruf hinzu. Dadurch wird der zweite Filter an die ursprüngliche WHERE-Anweisung angehängt, die mit einem AND verbunden wird.
Mage::getModel('catalog/product')->getCollection()
->addFieldToFilter('sku',array('like'=>'a%'))
->addFieldToFilter('sku',array('like'=>'%b'));
Die resultierende WHERE-Klausel sieht folgendermaßen aus:
WHERE (e.sku like 'a%') AND (e.sku like '%b')
Nehmen wir an, wir wollen alle Skus, die mit 'a' beginnen oder mit 'b' enden. Wie fügen wir eine OR-Klausel hinzu? Dank Magentos Kollektionen ist es ziemlich geradlinig. Wir fügen den Filter als zweites Element in das Filterarray ein.
Mage::getModel('catalog/product')->getCollection()
->addFieldToFilter('sku', array(
array('like'=>'a%'),
array('like'=>'%b')
));
Nun sieht die resultierende WHERE-Klausel so aus:
WHERE (((e.sku like 'a%') or (e.sku like '%b')))