_Дані моделі 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, чому він включений?

Чи існує згода _даних для моделей 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.