Nicolas le 4 juin 2009

Objectif

Pour inaugurer la nouvelle catégorie trucs et astuces, penchons nous sur la manipulation des collections d’objets métier Magento stockés selon le modèle EAV (Entité – Attribut – Valeur).

Exemples

Les portions de code suivantes peuvent être indifféremment testées dans un contrôleur, bloc, helper ou même template de Magento.

Récupérer la collection de produits

// récupérer le modèle de données Product du module Mage/Catalog
$model = Mage::getModel('catalog/product');
// récupérer la collection de produits
$products = $model->getCollection();

Filtrer la collection sur le nom

$products = Mage::getModel('catalog/product')
    ->getCollection()
    // seulement les produits dont le nom est "mon beau produit"
    ->addAttributeToFilter('name', 'mon beau produit');

Ajouter l’attribut EAV prix

Par défaut et pour une raison d’économie de ressources inhérente au modèle EAV, lorsque l’on charge une collection d’objets Magento, les objets récupérés ne contiennent pas tous leurs attributs.

$products = Mage::getModel('catalog/product');
    ->getCollection()
    // ajouter l'attribut prix aux produits retournés
    ->addAttributeToSelect(array('price'));

Filtrer sur l’attribut EAV prix

$products = Mage::getModel('catalog/product');
    ->getCollection()
    // ajouter l'attribut prix
    ->addAttributeToSelect(array('price'))
    // filtrer la collection sur celui-ci
    ->addAttributeToFilter('price', '49.99');

Ajouter tous les attributs EAV

Enfin, si l’on a besoin de tous les attributs, on peux les récupérer comme indiqué ci-dessous, on imagine aisément que la requête générée par Magento est composée d’un grand nombre de jointures, à utiliser avec parcimonie ! :D

$products = Mage::getModel('catalog/product')
    // ajouter tous les attributs
    ->addAttributeToSelect('*');

Conclusion

Une prochaine astuce présentera des manipulations plus complexes, les jointures !

Mots-clefs: ,

2 réponses à “Manipuler les collections d’objets Magento”

  1. DavidV dit :

    Bonjour,

    Merci pour ce tuto. c’est très clair.
    Néanmoins, si je veux sélectionner les produits dont le prix est compris entre 15 et 20 €, comment paramétrer le addAttributeToFilter(’price’) ???

  2. Nicolas dit :

    Bonjour,

    et voilà :
    $collection = Mage::getModel(’catalog/product’) -> getCollection();
    $collection -> addAttributeToSelect(array(’price’))
    -> addAttributeToFilter(’price’, array(’from’ => 15, ‘to’ => 20));

Laisser une réponse

Vous pouvez utiliser ces mots-clés: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">