Bir EAV modelinin _ verileri


9

Basit bir modelin (örneğin cataloginventory/stock_item) _ verilerinin veritabanı tablolarının alanlarına karşılık gelen bir alan değeri çiftleri dizisi olduğunu anlıyorum . EAV modelleri için _data içeriğini bilmek istedim, bu yüzden catalog/productdebug () işlevini kullanarak _data'yı kontrol ettim .

Bulgu, alan catalog_product_entityvarlık çiftlerini ve bu varlığın bazı özelliklerini içerdiği yönündedir. Bana mantıklı geliyorlar. Anlayamadığım nokta da bir çift içermesidir:

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

, hangi bir örneğidir cataloginventory/stock_item. Bu ne katalog / ürün varlığının bir niteliği ne de içindeki bir alan catalog_product_entity, neden dahil edildi?

EAV modelleri için _data kuralı var mı?

Yanıtlar:


6

Teoride _dataherhangi bir şey içerebilir.
Kullanarak özel değerlerinizi buraya ekleyebilirsiniz setData($key, $value).
Genellikle belirttiğiniz gibi, tablodaki sütunların veya bir EAV varlığı olması durumunda niteliklerin değerlerini içerir, ancak bazı özel durumlarda başka değerler içerebilir.
Bu, örneğin ürünler için olur.
İşte nedeni.
Modülde Mage_CatalogInventoryolay için bir gözlemci vardır catalog_product_load_after. Bu olay her aradığınızda çağrılır $product->load().
Yürütülen yöntem Mage_CatalogInventory_Model_Observer::addInventoryData.
Bu çağırıyor $productStockItem->assignProduct($product);.
Eğer daha derine Mage_CatalogInventory_Model_Stock_Item::assignProductinersek, bir noktada bu çağrılarla sonuçlanırız $product->setStockItem($this);. Bu eşdeğerdir $product->setData('stock_item', $this).
Sonuçta Mage_CatalogInventory_Model_Stock_Itemin_data['stock_item'].

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.