EAV模型的_data


9

我了解到,简单模型(例如cataloginventory/stock_item)的_data是字段值对的数组,它对应于数据库表的字段。我很想知道EAV模型的_data内容,所以我检查了catalog/product使用debug()函数的_data 。

发现是它包含的字段值对catalog_product_entity,以及该实体的某些属性。他们对我来说很有意义。我不明白的是,它也包含一对:

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

,这是的实例cataloginventory/stock_item。这既不是目录/产品实体的属性,也不是中的字段catalog_product_entity,为什么要包含它?

EAV模型是否有_data的约定?

Answers:


6

理论上_data可以包含任何内容。
您可以使用在其中添加自定义值setData($key, $value)
通常,它包含您所说的表中各列的值,或者如果它是EAV实体,则包含属性的值,但是对于某些特定情况,它可以包含其他值。
例如,这发生在产品上。
这就是为什么。
在模块中,Mage_CatalogInventory有事件的观察者catalog_product_load_after。每次调用都会调用此事件$product->load()
执行的方法是Mage_CatalogInventory_Model_Observer::addInventoryData
这个叫$productStockItem->assignProduct($product);
如果我们进行更深入的研究,我们最终会在Mage_CatalogInventory_Model_Stock_Item::assignProduct那一点上陷入困境$product->setStockItem($this);。这相当于$product->setData('stock_item', $this)
因此,您最终拥有Mage_CatalogInventory_Model_Stock_Itemin 的实例_data['stock_item']

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.