Les _données d'un modèle EAV


9

Je comprends que les _données d'un modèle simple (par exemple, cataloginventory/stock_item) est un tableau de paires de valeurs de champ, ce qui correspond aux champs des tables de base de données. J'étais curieux de connaître le contenu de _data pour les modèles EAV, j'ai donc vérifié les _data de l' catalog/productutilisation de la fonction debug ().

Le résultat est qu'il contient les paires de valeurs de champ de catalog_product_entity, ainsi que certains attributs de cette entité. Ils ont du sens pour moi. Le point que je ne peux pas comprendre, c'est qu'il contient également une paire:

...    
[stock_item (Mage_CatalogInventory_Model_Stock_Item)] => Array
            (
                [item_id] => 1
                [product_id] => 1
                [stock_id]
                ......
            )
...

, qui est une instance de cataloginventory/stock_item. Ce n'est ni un attribut d'entité catalogue / produit, ni un champ dans catalog_product_entity, pourquoi est-il inclus?

Existe-t-il une convention de _données pour les modèles EAV?

Réponses:


6

En théorie, _datapeut contenir n'importe quoi.
Vous pouvez y ajouter vos valeurs personnalisées en utilisant setData($key, $value).
Habituellement, il contient, comme vous l'avez dit, les valeurs des colonnes de la table ou des attributs dans le cas où il s'agit d'une entité EAV, mais dans certains cas particuliers, il peut contenir d'autres valeurs.
Cela se produit pour les produits par exemple.
Voici pourquoi.
Dans le module, Mage_CatalogInventoryil y a un observateur de l'événement catalog_product_load_after. Cet événement est appelé chaque fois que vous appelez $product->load().
La méthode exécutée est Mage_CatalogInventory_Model_Observer::addInventoryData.
Celui-ci appelle $productStockItem->assignProduct($product);.
Si nous creusons plus profondément, nous nous retrouvons dans Mage_CatalogInventory_Model_Stock_Item::assignProductces appels à un moment donné $product->setStockItem($this);. C'est équivalent à $product->setData('stock_item', $this).
Donc , vous finissez par avoir l'instance Mage_CatalogInventory_Model_Stock_Itemen_data['stock_item'].

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.