_Data modelu EAV

9

Rozumiem, że _data prostego modelu (np. cataloginventory/stock_item) Jest tablicą par wartości pola, które odpowiadają polom tabel bazy danych. Byłem ciekawy poznać zawartość _data dla modeli EAV, więc sprawdziłem _data catalog/productużywania funkcji debug ().

Ustalono, że zawiera pary wartości pól catalog_product_entity, a także pewien atrybut tego bytu. Mają dla mnie sens. Nie rozumiem tylko, że zawiera także parę:

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

, który jest przykładem cataloginventory/stock_item. Nie jest to ani atrybut katalogu / produktu, ani pole catalog_product_entity, dlaczego zostało uwzględnione?

Czy istnieje konwencja _data dla modeli EAV?

MengT
źródło

Odpowiedzi:

6

Teoretycznie _datamoże zawierać wszystko.
Możesz tam dodać własne wartości, używając setData($key, $value).
Zwykle zawiera, jak powiedziałeś, wartości dla kolumn w tabeli lub atrybutów, jeśli jest to jednostka EAV, ale w niektórych szczególnych przypadkach może zawierać inne wartości.
Dzieje się tak na przykład w przypadku produktów.
Oto dlaczego.
W module Mage_CatalogInventoryjest obserwator zdarzenia catalog_product_load_after. To zdarzenie jest wywoływane za każdym razem, gdy dzwonisz $product->load().
Wykonywana metoda to Mage_CatalogInventory_Model_Observer::addInventoryData.
Ten dzwoni $productStockItem->assignProduct($product);.
Jeśli będziemy kopać głębiej Mage_CatalogInventory_Model_Stock_Item::assignProduct, w pewnym momencie skończymy na tych połączeniach $product->setStockItem($this);. Jest to równoważne z $product->setData('stock_item', $this).
W rezultacie masz instancję Mage_CatalogInventory_Model_Stock_Itemin_data['stock_item'].

Marius
źródło