Magento 2 EAV Model 介紹 (1)
上次教學了在Magento 2 的自定義事件, 這次要再加碼介紹Magento 的EAV ( Entity Attribute Value ) 的系統,在Magento系統中許多東西都是使用 Attribute 所控制,舉凡像是 Catalog Product、Catalog Category 等等,都有 Attribute 可以操作,但是,是什麼樣的原因可以達成這樣彈性強大且靈活的設計,它依靠的是背後的 EAV ( Entity Attribute Value ) 的系統。今天,我們就來了解一下這強大的功能背後的運作吧!
1.什麼是 EAV
1)在維基百科的定義:
Entity-Attribute-Value model (EAV), also known as object-attribute-value model and open schema is a data model that is used in circumstances where the number of attributes (properties, parameters) that can be used to describe a thing (an “entity” or “object”) is potentially very vast, but the number that will actually apply to a given entity is relatively modest. In mathematics, this model is known as a sparse matrix.
2)Alan Storm 的解釋為:
經過一個正規化應用的資料庫結構
所以,經過以上解釋,我們知道可以 Magento 透過 EAV Model 來存取各種格式的資料,至於資料欄位是如何開設的。我們以 Magento 內建的 catalog_product 為例,對應到的資料表有以下五張,不同形態的 Eav Attribute Value 也會分別存至不同的資料表內:
* catalog_product_entity
* catalog_product_entity_datetime
* catalog_product_entity_int
* catalog_product_entity_decimal
* catalog_product_entity_varchar
2.Entity Type
Entity 是 Magento 內的一種實體物件,在內部程式中則定義為 Entity Type,而 Magento 內建的 Entity Type 有以下幾種,當然也可以自己手動新增,無論是內建的 Entity Type 或是新增進去的都會存在 eav_entity_type 這張資料表內:
Entity Type | Class |
customer | Magento\Customer\Model\ResourceModel\Customer |
customer_address | Magento\Customer\Model\ResourceModel\Address |
catalog_category | Magento\Catalog\Model\ResourceModel\Category |
catalog_product | Magento\Catalog\Model\ResourceModel\Product |
order | Magento\Sales\Model\ResourceModel\Order |
invoice | Magento\Sales\Model\ResourceModel\Order |
creditmemo | Magento\Sales\Model\ResourceModel\Order\Creditmemo |
shipment | Magento\Sales\Model\ResourceModel\Order\Shipment
|
3.Attribute 屬性
Magento 內所有的 Attribute 皆會對應到 Entity Type,舉凡像是 Catalog Product 的 name、sku、price、inventory 或是 Customer 的 firstname、lastname、email 等等,皆是屬於 Attribute 的一種,所有的 Attribute 都會記錄在 eav_attribute 資料表內。
Attribute 新增的時候,可以透過模組 ( Module ) 內的 InstallData 來新增。而他的參數有以下這些,新增的方法我們將會在下一個篇內詳細的介紹。
* group
* type
* backend
* frontend
* label
* input
* class
* source
* global
* visible
* required
* user_defined
* default
* searchable
* filterable
* comparable
* visible_on_front
* used_in_product_listing
* unique
* apply_to
4.Attribute Set 屬性集
Attribute 會存在不同的屬性集 ( Attribute set ) 內,預設都會有 Default 的 Attribute Set,而 Attribute set 儲存在 eav_attribute_set 這張資料表內。
想看更多Magento 2 教學導覽,別忘了訂閱我們的電子報,以及追蹤我們的Facebook粉絲專頁,每天固定發文更新,為你補充實用電商知識!
延伸閱讀:
Magento 2 EAV Model 介紹 (2) – 使用程式新增 Attribute
Magento 2 EAV Model 介紹 (3) – 在 Magento 2 使用程式新增 entity type
我要留言