EAV and extension attributes (5h)
https://bsscommerce.com/confluence/magento-2-eav-model/
https://devdocs.magento.com/guides/v2.4/extension-dev-guide/attributes.html
Ta xem xét một ví dụ sau:
Giả sử ta cần lưu thông tin product, theo cách lưu trữ thông thường, ta sẽ tạo bảng product, gồm các cột sau:
Bây giờ, ta muốn theo một thuộc tính là cost (là giá trị nhập kho của sản phẩm), ta sẽ phải thêm một cột vào bảng product này.
Giả sử, ta có một trang web bán hàng gồm rất nhiều loại sản phẩm, mỗi loại sản phẩm lại có những thuộc tính riêng của nó, như quần áo (size, color), điện thoại (số imei),... thì ta sẽ phải cần thêm rất nhiều thuộc tính (attribute) vào trong bảng product trên.Điều này dẫn đến bảng product sẽ có rất nhiều cột, khiến cho cấu trúc bảng trở nên rất phức tạp. Mỗi lần thêm một attribute ta lại phải tạo cột, và mỗi lần xóa lại phải xóa cột.
Để giải quyết vấn đề này, ta sẽ chuyển bảng product ra lưu theo mô hình EAV (Entity – Attribute – Value). Trong magento, cần chú ý customer, product sẽ được lưu theo mô hình EAV. Bởi vì 2 thành phần này sẽ cần cập nhật, thêm, sửa xóa attribute một cách thường xuyên.
Mô hình EAV gồm 3 bảng:
Entity: lưu trữ những thông tin cơ bản nhất của entity, tức là những thuộc tính bắt buộc phải có. (product_entity)
Attribute: lưu trữ các thuộc tính của entity, tương ứng với cột theo mô hình cũ (flat).
(eav_attribute)
Value: bảng lưu trữ giá trị, ứng với product này, attribute này thì sẽ có giá trị là bao nhiều. Ở đây sẽ có nhiều bảng value, ứng với mỗi kiểu giá trị (product_entity_varchar) và (product_entity_decimal).
Tạo attribute trong Magento : https://bsscommerce.com/confluence/magento-2-eav-model/ - Phần số 6. Khuyến cáo dùng cách 6.2
Exercise:
Add attribute is_feature to product
Write controller to show all feature product.