Die _Daten eines EAV-Modells

9

Ich verstehe, dass die _Daten eines einfachen Modells (z. B. cataloginventory/stock_item) ein Array von Feldwertpaaren sind, die den Feldern von Datenbanktabellen entsprechen. Ich war neugierig auf den Inhalt von _data für EAV-Modelle und habe die _data für die catalog/productVerwendung der Funktion debug () überprüft .

Das Ergebnis ist, dass es die Feldwertpaare von catalog_product_entityund auch einige Attribute dieser Entität enthält. Sie machen für mich Sinn. Der Punkt, den ich nicht verstehen kann, ist, dass er auch ein Paar enthält:

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

, das ist eine Instanz von cataloginventory/stock_item. Dies ist weder ein Attribut der Katalog- / Produktentität noch ein Feld in catalog_product_entity, warum ist es enthalten?

Gibt es eine Konvention von _data für EAV-Modelle?

MengT
quelle

Antworten:

6

Theoretisch _datakann alles enthalten.
Sie können dort Ihre benutzerdefinierten Werte hinzufügen, indem Sie verwenden setData($key, $value).
Normalerweise enthält es, wie Sie sagten, die Werte für die Spalten in der Tabelle oder für Attribute, falls es sich um eine EAV-Entität handelt. In bestimmten Fällen kann es jedoch auch andere Werte enthalten.
Dies geschieht beispielsweise für die Produkte.
Hier ist warum.
Im Modul Mage_CatalogInventorygibt es einen Beobachter für die Veranstaltung catalog_product_load_after. Dieses Ereignis wird bei jedem Anruf aufgerufen $product->load().
Die ausgeführte Methode ist Mage_CatalogInventory_Model_Observer::addInventoryData.
Dieser ruft an $productStockItem->assignProduct($product);.
Wenn wir tiefer graben, landen wir Mage_CatalogInventory_Model_Stock_Item::assignProductan einem Punkt in diesen Anrufen $product->setStockItem($this);. Dies ist äquivalent zu $product->setData('stock_item', $this).
Sie haben also die Instanz von Mage_CatalogInventory_Model_Stock_Itemin_data['stock_item'].

Marius
quelle