Mysql
 sql >> Base de données >  >> RDS >> Mysql

Besoin d'aide pour comprendre les objets de la collection de produits Magento et le modèle de catalogue/produit

Vous avez plusieurs façons d'accéder aux données depuis magento :

  • en utilisant load() => il charge TOUTES les données (attributs) relatives à un modèle. C'est très lent et tueur de performances. Pour un produit, vous devez utiliser un load() uniquement sur la page du produit (car toutes les données que vous utiliserez sur cette page sont relatives à un seul objet .. vous pouvez donc le charger complètement)

  • using collection => lorsque vous avez besoin de récupérer une liste d'objets, vous devez utiliser (au moins) une collection. C'est à vous de décider de la liste d'attributs que vous souhaitez récupérer. Vous pouvez ajouter un attribut à sélectionner/filtrer et la collection réussira à faire les jointures SQL aux tables EAV etc... en arrière-plan

  • utiliser SQL personnalisé => la collecte peut être lente lorsqu'il s'agit d'objets complexes (une collection initialise de nombreuses jointures SQL à la table dont vous n'avez peut-être pas besoin)... la dernière méthode pour accéder aux données de BDD consiste à créer votre propre SQL dans votre ResourceModel

Dans le script que vous montrez, il y a une énorme erreur :vous chargez un modèle complet dans un foreach itérant sur une collection. Il ne faut jamais faire ça, si vous devez charger() le produit, je suppose que c'est parce que vous n'avez pas trouvé d'attribut dans la collection ? Dans ce cas il suffit de modifier la collection pour récupérer l'attribut...

Pour un produit par exemple, magento offre un moyen d'ajouter (ou de supprimer) automatiquement des attributs à toute collection produit-> que vous instanciez. (voir balise XML frontend/product/collection/attributes dans le config.xml de Mage_Catalog)