Los _datos de un modelo EAV

9

Entiendo que los datos de un modelo simple (p. Ej. cataloginventory/stock_item) Es una matriz de pares de valores de campo, que corresponde a los campos de las tablas de la base de datos. Tenía curiosidad por saber el contenido de _data para los modelos EAV, así que verifiqué los _datos del catalog/productuso de la función debug ().

El hallazgo es que contiene los pares de valores de campo catalog_product_entityy también algunos atributos de esta entidad. Tienen sentido para mí. El punto que no puedo entender es que también contiene un par:

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

, que es una instancia de cataloginventory/stock_item. Esto no es un atributo de la entidad de catálogo / producto, ni un campo en catalog_product_entity, ¿por qué está incluido?

¿Existe una convención de _data para los modelos EAV?

MENGT
fuente

Respuestas:

6

En teoría _datapuede contener cualquier cosa.
Puede agregar sus valores personalizados allí mediante setData($key, $value).
Por lo general, contiene, como dijiste, los valores para las columnas de la tabla, o para los atributos en caso de que sea una entidad EAV, pero para algunos casos particulares puede contener otros valores.
Esto sucede para los productos, por ejemplo.
Aquí es por qué.
En el módulo Mage_CatalogInventoryhay un observador para el evento catalog_product_load_after. Este evento se llama cada vez que llama $product->load().
El método ejecutado es Mage_CatalogInventory_Model_Observer::addInventoryData.
Este llama $productStockItem->assignProduct($product);.
Si profundizamos más, terminamos en Mage_CatalogInventory_Model_Stock_Item::assignProductesas llamadas en un punto $product->setStockItem($this);. Esto es equivalente a $product->setData('stock_item', $this).
Entonces terminas teniendo la instancia de Mage_CatalogInventory_Model_Stock_Itemen_data['stock_item'].

Marius
fuente