_Data của mô hình EAV


9

Tôi hiểu rằng _data của một mô hình đơn giản (ví dụ cataloginventory/stock_item:) là một mảng các cặp giá trị trường, tương ứng với các trường của các bảng cơ sở dữ liệu. Tôi tò mò muốn biết nội dung của _data cho các mô hình EAV, vì vậy tôi đã kiểm tra _data catalog/productbằng cách sử dụng hàm debug ().

Phát hiện là nó chứa các cặp giá trị trường catalog_product_entityvà một số thuộc tính của thực thể này. Họ có ý nghĩa với tôi. Điểm tôi không thể hiểu là cũng chứa một cặp:

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

, đó là một ví dụ của cataloginventory/stock_item. Đây không phải là một thuộc tính của danh mục sản phẩm / thực thể, cũng không phải là một lĩnh vực catalog_product_entity, tại sao nó được bao gồm?

Có một quy ước về _data cho các mô hình EAV không?

Câu trả lời:


6

Trong lý thuyết _datacó thể chứa bất cứ điều gì.
Bạn có thể thêm các giá trị tùy chỉnh của mình vào đó bằng cách sử dụng setData($key, $value).
Thông thường nó chứa như bạn đã nói, các giá trị cho các cột trong bảng hoặc cho các thuộc tính trong trường hợp đó là thực thể EAV, nhưng đối với một số trường hợp cụ thể, nó có thể chứa các giá trị khác.
Điều này xảy ra cho các sản phẩm ví dụ.
Đây là lý do tại sao.
Trong mô-đun Mage_CatalogInventorycó một người quan sát cho sự kiện catalog_product_load_after. Sự kiện này được gọi mỗi lần bạn gọi $product->load().
Phương thức được thực hiện là Mage_CatalogInventory_Model_Observer::addInventoryData.
Cái này gọi $productStockItem->assignProduct($product);.
Nếu chúng ta đào sâu hơn, chúng ta sẽ kết thúc Mage_CatalogInventory_Model_Stock_Item::assignProductcuộc gọi đó tại một thời điểm $product->setStockItem($this);. Đây là hiệu quả $product->setData('stock_item', $this).
Vì vậy, bạn kết thúc có thể hiện của Mage_CatalogInventory_Model_Stock_Itemtrong_data['stock_item'].

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.