간단한 모델의 _data (예 🙂 cataloginventory/stock_item
는 데이터베이스 테이블의 필드에 해당하는 필드 값 쌍의 배열 이라는 것을 이해합니다 . EAV 모델의 _data 내용을 알고 싶어서 catalog/product
debug () 함수 를 사용하여 _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']
.