Os _dados de um modelo EAV

9

Eu entendo que os _dados de um modelo simples (por exemplo, cataloginventory/stock_item) são uma matriz de pares de valores de campo, que corresponde aos campos das tabelas do banco de dados. Eu estava curioso para saber o conteúdo de _data para modelos EAV, então verifiquei os _data do catalog/productuso da função debug ().

A descoberta é que ele contém os pares de valores de campo catalog_product_entitye também algum atributo dessa entidade. Eles fazem sentido para mim. O ponto que não consigo entender é que também contém um par:

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

, que é uma instância de cataloginventory/stock_item. Este não é um atributo da entidade de catálogo / produto, nem um campo em catalog_product_entity, por que está incluído?

Existe uma convenção de _data para modelos EAV?

MengT
fonte

Respostas:

6

Em teoria, _datapode conter qualquer coisa.
Você pode adicionar seus valores personalizados lá usando setData($key, $value).
Geralmente, ele contém, como você disse, os valores para as colunas da tabela ou para os atributos, caso seja uma entidade EAV, mas, em alguns casos particulares, pode conter outros valores.
Isso acontece para os produtos, por exemplo.
Aqui está o porquê.
No módulo, Mage_CatalogInventoryhá um observador para o evento catalog_product_load_after. Este evento é chamado toda vez que você liga $product->load().
O método executado é Mage_CatalogInventory_Model_Observer::addInventoryData.
Este chama $productStockItem->assignProduct($product);.
Se aprofundarmos, terminamos nessas Mage_CatalogInventory_Model_Stock_Item::assignProductchamadas em um ponto $product->setStockItem($this);. Isso é equivalente a $product->setData('stock_item', $this).
Então você acaba tendo a instância de Mage_CatalogInventory_Model_Stock_Itemna_data['stock_item'].

Marius
fonte