I dati di un modello EAV


9

Comprendo che i _data di un modello semplice (ad es. cataloginventory/stock_item) Sono una matrice di coppie di valori di campo, che corrispondono ai campi delle tabelle del database. Ero curioso di conoscere il contenuto di _data per i modelli EAV, quindi ho controllato i _data catalog/productdell'uso della funzione debug ().

La scoperta è che contiene le coppie di valori dei campi di catalog_product_entity, e anche alcuni attributi di questa entità. Hanno senso per me. Il punto che non riesco a capire è che contiene anche una coppia:

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

, che è un'istanza di cataloginventory/stock_item. Questo non è né un attributo del catalogo / entità del prodotto, né un campo in catalog_product_entity, perché è incluso?

Esiste una convenzione di _data per i modelli EAV?

Risposte:


6

In teoria _datapuò contenere qualsiasi cosa.
Puoi aggiungere i tuoi valori personalizzati lì dentro usando setData($key, $value).
Di solito contiene come hai detto, i valori per le colonne nella tabella o per gli attributi nel caso in cui sia un'entità EAV, ma per alcuni casi particolari può contenere altri valori.
Questo accade ad esempio per i prodotti.
Ecco perché.
Nel modulo Mage_CatalogInventoryc'è un osservatore per l'evento catalog_product_load_after. Questo evento viene chiamato ogni volta che chiami $product->load().
Il metodo eseguito è Mage_CatalogInventory_Model_Observer::addInventoryData.
Questo chiama $productStockItem->assignProduct($product);.
Se scaviamo più a fondo finiamo in Mage_CatalogInventory_Model_Stock_Item::assignProductquelle chiamate a un certo punto $product->setStockItem($this);. Questo è equivalente a $product->setData('stock_item', $this).
Quindi finisci per avere l'istanza di Mage_CatalogInventory_Model_Stock_Itemin_data['stock_item'].

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.