_Data model EAV

9

Saya mengerti bahwa _data model sederhana (misalnya, cataloginventory/stock_item) adalah array pasangan nilai bidang, yang sesuai dengan bidang tabel database. Saya ingin tahu konten _data untuk model EAV, jadi saya memeriksa _data catalog/productmenggunakan fungsi debug ().

Temuannya adalah bahwa ia berisi pasangan nilai bidang catalog_product_entity, dan juga beberapa atribut entitas ini. Itu masuk akal bagi saya. Poin yang saya tidak mengerti adalah itu juga mengandung pasangan:

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

, yang merupakan turunan dari cataloginventory/stock_item. Ini bukan atribut katalog / entitas produk, atau bidang dalam catalog_product_entity, mengapa disertakan?

Apakah ada konvensi _data untuk model EAV?

MengT
sumber

Jawaban:

6

Secara teori _databisa mengandung apa saja.
Anda dapat menambahkan nilai khusus di sana dengan menggunakan setData($key, $value).
Biasanya itu berisi seperti yang Anda katakan, nilai untuk kolom dalam tabel, atau untuk atribut jika entitas EAV, tetapi untuk beberapa kasus tertentu dapat berisi nilai-nilai lain.
Ini terjadi untuk produk misalnya.
Inilah sebabnya.
Dalam modul Mage_CatalogInventoryada pengamat untuk acara tersebut catalog_product_load_after. Acara ini disebut setiap kali Anda menelepon $product->load().
Metode yang dieksekusi adalah Mage_CatalogInventory_Model_Observer::addInventoryData.
Yang ini panggilan $productStockItem->assignProduct($product);.
Jika kita menggali lebih dalam kita berakhir di Mage_CatalogInventory_Model_Stock_Item::assignProductpanggilan itu pada satu titik $product->setStockItem($this);. Ini sama dengan $product->setData('stock_item', $this).
Jadi, Anda akhirnya memiliki contoh Mage_CatalogInventory_Model_Stock_Itemdalam_data['stock_item'].

Marius
sumber