_Данные модели EAV


9

Я понимаю, что _данные простой модели (например, cataloginventory/stock_item) представляют собой массив пар значений полей, соответствующих полям таблиц базы данных. Мне было любопытно узнать содержание _data для моделей EAV, поэтому я проверил _data при catalog/productиспользовании функции debug ().

Вывод состоит в том, что он содержит пары значений полей 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, почему он включен?

Существует ли соглашение _data для моделей EAV?

Ответы:


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_Itemв_data['stock_item'],

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.