magento
Hoe collecties te filteren
Zoeken…
parameters
Parameter | Details |
---|---|
$ addFieldToFilter ( $ veld , $ voorwaarde = null) | {string} Het veld dat we aan het filter toevoegen. |
$ addFieldToFilter ($ veld, $ voorwaarde = null ) | {gemengd} De definitie van het filter dat we zullen gebruiken. |
addAttributeToFilter ( $ attr , $ condition = null, $ join = 'inner') | {string} Het veld dat we aan het filter toevoegen. |
addAttributeToFilter ($ attr, $ condition = null , $ join = 'inner') | {gemengd} De definitie van het filter dat we zullen gebruiken. |
addAttributeToFilter ($ attr, $ condition = null, $ join = 'inner' ) | {('inner', 'left')} Het type sql-join dat moet worden gebruikt bij deelname aan de EAV-tabel. |
Opmerkingen
Vergelijkingsargumenten filteren
Magento biedt ook een flexibele manier van filteren met behulp van vergelijkingsoperatoren. Hier is een lijst met geldige operators en hun syntaxis:
Alle vergelijkingsargumenten kunnen worden doorgegeven aan de tweede parameter van de addFieldToFielter()
of addAttributeToFilter()
.
$collection_of_products->addAttributeToFilter('visible',array("eq"=>1));
Vergelijking | Argument Array | Resulterend SQL-fragment |
---|---|---|
Equals | array ( "eq" => $ var) | WHERE (`my_field` = $ var) |
Niet gelijk | array ( "NEH" => $ var) | WHERE (`mijn_veld`! = $ Var) |
Leuk vinden | array ( "like" => $ var) | WHERE (`my_field` LIKE $ var) |
Niet zoals | array ( "Nlike" => $ var) | WAAR (`mijn_veld` NIET LIKE $ var) |
is | array ( "is" => $ var) | WAAR (`mijn_veld` IS $ var) |
In | array ( "in" => $ var) | WHERE (`mijn_veld` IN ($ var)) |
Niet in | array ( "nin" => $ var) | WHERE (`mijn_veld` NIET IN ($ var)) |
Nul | array ( "null" => true) | WAAR (`mijn_veld` IS NULL) |
Niet nul | array ( "notnull" => true) | WAAR (`mijn_veld` IS NIET NULL) |
Groter dan | array ( "gt" => $ var) | WAAR (`mijn_veld`> $ var) |
Minder dan | array ( "lt" => $ var) | WHERE (`mijn_veld` <$ var) |
Groter dan of gelijk aan | array ( "gteq" => $ var) | WHERE (`mijn_veld`> = $ var) |
Minder dan of gelijk | array ( "lteq" => $ var) | WHERE (`mijn_veld` <= $ var) |
Zoeken in Set | array ( "Finset" => array ($ var)) | WHERE (find_in_set ($ var, `my_field`) |
Van en naar | array ("from" => $ var1, "to" => $ var2) | WHERE (`my_field`> = $ var1 EN` my_field` <= $ var2) |
Collecties filteren
Magento heeft een krachtige set methoden om collecties te filteren. Aangezien er twee soorten objecten in verzamelingen kunnen worden opgenomen, moeten we eerst bepalen met welk type gegevens we werken voordat we deze kunnen filteren. Magento implementeert een EAV-datamodel voor entiteiten zoals producten en categorieën. Er is een andere set methoden om te gebruiken als we een verzameling EAV-objecten filteren.
In Magento worden bestellingen niet opgeslagen als EAV-objecten. Dit maakt de bestellingenverzameling een goed voorbeeld voor het filteren van een basisverzameling.
$collection_of_orders = Mage::getModel('sales/order')->getCollection();
$collection_of_orders->addFieldToFilter('status','processing');
Als we naar de productenverzameling kijken, zien we dat de producten zijn opgeslagen in een EAV-datamodel. We kunnen ook eenvoudig filteren op EAV-kenmerken.
$collection_of_products = Mage::getModel('catalog/product')->getCollection();
$collection_of_products->addAttributeToFilter('visible',1);
AND's en OR's verwerken in filters
Wanneer we onze gegevens opvragen, hebben we vaak meer dan één filter nodig om de exacte gegevensset te krijgen waarnaar we op zoek zijn. In SQL behandelen we dit met EN- en OF-clausules. We kunnen hetzelfde bereiken met collecties.
Om een EN-component aan uw zoekopdracht toe te voegen, voegt u gewoon een andere methodeaanroep toe. Dit voegt het tweede filter toe aan de originele WHERE-instructie en voegt deze samen met een AND.
Mage::getModel('catalog/product')->getCollection()
->addFieldToFilter('sku',array('like'=>'a%'))
->addFieldToFilter('sku',array('like'=>'%b'));
De resulterende WHERE-component ziet er als volgt uit:
WHERE (e.sku like 'a%') AND (e.sku like '%b')
Laten we nu zeggen dat we alle skus willen die beginnen met 'a' OF eindigen met 'b'. Hoe voegen we een OF-clausule toe? Dankzij de collecties van Magento is het vrij eenvoudig. We voegen het filter toe als een tweede element in de filterarray.
Mage::getModel('catalog/product')->getCollection()
->addFieldToFilter('sku', array(
array('like'=>'a%'),
array('like'=>'%b')
));
Nu ziet de resulterende WHERE-component er als volgt uit:
WHERE (((e.sku like 'a%') or (e.sku like '%b')))