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'))) 


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow