EAV 모델의 _data (

간단한 모델의 _data (예 🙂 cataloginventory/stock_item는 데이터베이스 테이블의 필드에 해당하는 필드 값 쌍의 배열 이라는 것을 이해합니다 . EAV 모델의 _data 내용을 알고 싶어서 catalog/productdebug () 함수 를 사용하여 _data를 확인했습니다 .

결과는의 필드 값 쌍 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 모델에 대한 _data 규칙이 있습니까?



답변

이론적으로 _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);. 이는 eqivalent $product->setData('stock_item', $this)입니다.
당신의 인스턴스 가지고 결국 그래서 Mage_CatalogInventory_Model_Stock_Item에서를_data['stock_item'].