Recherche…


Paramètres

Paramètre Détails
$ addFieldToFilter ( $ field , $ condition = null) {string} Le champ que nous ajoutons au filtre.
$ addFieldToFilter ($ field, $ condition = null ) {mixed} La définition du filtre que nous allons utiliser.
addAttributeToFilter ( $ attr , $ condition = null, $ join = 'inner') {string} Le champ que nous ajoutons au filtre.
addAttributeToFilter ($ attr, $ condition = null , $ join = 'inner') {mixed} La définition du filtre que nous allons utiliser.
addAttributeToFilter ($ attr, $ condition = null, $ join = 'inner' ) {('inner', 'left')} Le type de jointure SQL à utiliser pour rejoindre la table EAV.

Remarques

Arguments de comparaison des filtres

Magento offre également un moyen flexible de filtrage en utilisant également des opérateurs de comparaison. Voici une liste des opérateurs valides et leur syntaxe:

Tous les arguments de comparaison peuvent être transmis au second paramètre des addFieldToFielter() ou addAttributeToFilter() .

$collection_of_products->addAttributeToFilter('visible',array("eq"=>1));
Comparaison Tableau d'argument Extrait SQL résultant
Équivaut à array ("eq" => $ var) WHERE (`my_field` = $ var)
Inégal array ("neq" => $ var) WHERE (`my_field`! = $ Var)
Comme array ("like" => $ var) WHERE (`my_field` LIKE $ var)
Pas comme array ("nlike" => $ var) WHERE (`my_field` NOT LIKE $ var)
Est array ("is" => $ var) WHERE (`my_field` IS $ var)
Dans array ("in" => $ var) WHERE (`my_field` IN ($ var))
Pas dedans array ("nin" => $ var) WHERE (`my_field` NOT IN ($ var))
Nul array ("null" => true) WHERE (`my_field` IS NULL)
Pas nul array ("notnull" => true) WHERE (`my_field` N'EST PAS NULL)
Plus grand que array ("gt" => $ var) WHERE (`my_field`> $ var)
Moins que array ("lt" => $ var) WHERE (`my_field` <$ var)
Meilleur que ou égal array ("gteq" => $ var) WHERE (`my_field`> = $ var)
Moins que ou égal array ("lteq" => $ var) WHERE (`my_field` <= $ var)
Trouver dans l'ensemble array ("finset" => array ($ var)) WHERE (find_in_set ($ var, `my_field`)
De et à array ("from" => $ var1, "to" => $ var2) WHERE (`my_field`> = $ var1 ET` my_field` <= $ var2)

Collections de filtrage

Magento dispose d'un puissant ensemble de méthodes pour filtrer les collections. Comme il existe deux types d'objets pouvant être contenus dans des collections, nous devons d'abord déterminer le type de données avec lequel nous travaillons avant de pouvoir le filtrer. Magento implémente un modèle de données EAV pour des entités telles que des produits et des catégories. Il existe un ensemble différent de méthodes à utiliser si nous filtrons une collection d'objets EAV.

Dans Magento, les commandes ne sont pas stockées en tant qu'objets EAV. Cela fait de la collection de commandes un bon exemple pour filtrer une collection de base.

$collection_of_orders = Mage::getModel('sales/order')->getCollection();
$collection_of_orders->addFieldToFilter('status','processing');

Si nous examinons la collection de produits, nous pouvons voir que les produits sont stockés dans un modèle de données EAV. Nous pouvons facilement filtrer par attributs EAV.

$collection_of_products = Mage::getModel('catalog/product')->getCollection();
$collection_of_products->addAttributeToFilter('visible',1);

Gestion des AND et des OR dans les filtres

Lorsque nous interrogeons nos données, nous avons souvent besoin de plusieurs filtres pour obtenir le jeu de données exact que nous recherchons. En SQL, nous traitons cela avec les clauses AND et OR. Nous pouvons réaliser la même chose avec les collections.

Pour ajouter une clause AND à votre requête, ajoutez simplement un autre appel de méthode. Cela ajoutera le second filtre à l'instruction WHERE originale en la joignant à un ET.

Mage::getModel('catalog/product')->getCollection()
        ->addFieldToFilter('sku',array('like'=>'a%'))
        ->addFieldToFilter('sku',array('like'=>'%b'));

La clause WHERE résultante ressemblera à ceci:

WHERE (e.sku like 'a%') AND (e.sku like '%b')

Maintenant, disons que nous voulons que tous les skus qui commencent par 'a' OU se terminent par 'b'. Comment ajoutons-nous une clause OR? Grâce aux collections de Magento, c'est assez simple. Nous ajoutons le filtre comme deuxième élément du tableau de filtres.

Mage::getModel('catalog/product')->getCollection()
        ->addFieldToFilter('sku', array(
            array('like'=>'a%'), 
            array('like'=>'%b')
        ));

Maintenant, la clause WHERE qui en résulte ressemblera à ceci:

WHERE (((e.sku like 'a%') or (e.sku like '%b'))) 


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow