Chuyển tới nội dung
Trang chủ » EAV trong Magento 2 | Magento 2 cơ bản

EAV trong Magento 2 | Magento 2 cơ bản

Mô hình Entity-Attribute-Value là một mô hình dữ liệu nhằm mô tả các entity(thực thể) trong đó số lượng attribute dự kiến ​​sẽ rất lớn, nhưng trên thực tế, số lượng các attribute được sử dụng trong thực thể là ít.

  • Entity lưu trữ thông tin về loại dữ liệu đang được lưu trữ(product, customer…)
  • Attribute là thuộc tính riêng của từng thực thể (name, weight, email address).
  • Value là giá trị của một thực thể và thuộc tính nhất định.
EAV trong Magento 2
EAV trong Magento 2

 

Những Entity trong Magento

Bạn có thể xem danh sách cách EAV trong Magento 2 tại bảng eav_entity_type. Các bạn có thể thấy nhiều hơn 4 dòng dữ liệu nhưng thực chất chỉ có 4 entity theo mô hình EAV thôi:

  • customer_entity
  • customer_address_entity
  • catalog_category_entity
  • catalog_product_entity

Lợi ích của EAV trong Magento 2

Mô hình EAV giúp giải quyết rất nhiều vấn đề liên quan đến thiết kế cơ sở dữ liệu cho trang web, đặc biệt khi bạn muốn quản lý, sửa đổi hoặc tạo các thuộc tính mới cho các thực thể:

  • Trong Flat table khi 1 column không có dữ liệu chúng sẽ tự động lưu giá trị là null gây tốn tài nguyên. Trong khi đó, EAV khi không có dữ liệu nó sẽ chẳng có gì cả. Mình thấy đây cũng là lợi ích lớn nhất của EAV trong Magento 2.
  • Dễ dàng tạo các thuộc tính mới và quản lý sự thay đổi. Nếu bạn muốn thêm thuộc tính mới cho thực thể, không cần phải sửa đổi cấu trúc bảng, nhưng điều duy nhất bạn nên làm là thêm dữ liệu mới vào các bảng có sẵn.
  • Hỗ trợ quản lý và lưu trữ dữ liệu thuộc tính dựa trên đa quốc gia, đa ngôn ngữ, tương ứng với Store hoặc Website.
  • Có khả năng tùy biến cao hơn cấu trúc dữ liệu của Flat table.

Entity

Hãy lấy bảng catalog_product_entity làm ví dụ. Đây là bảng chính của catalog product. Nếu bạn để ý bạn sẽ thấy khi chúng ta dùng Collection để get dữ liệu của product thì chúng ta chỉ lấy được những column của table này. Nếu muốn lấy thêm các column khác các bạn phải sử dụng addAttributeToSelect() để làm điều đó.

Attribute

Bảng eav_attribute nơi lưu trữ những attribute. Nếu bạn thêm một product attribute hay customer attribute thì attribute bạn thêm vào sẽ được lưu ở đây cùng các tham số của chúng.

Value

EAV trong Magento 2, các kiểu dữ liệu sẽ được lưu vào các bảng tương ứng, vẫn lấy catalog_product_entity làm ví dụ:

  • catalog_product_entity_datetime
  • catalog_product_entity_decimal
  • catalog_product_entity_gallery
  • catalog_product_entity_int
  • catalog_product_entity_text
  • catalog_product_entity_varchar

Cách để xem giá trị của 1 attribute

  1. Đầu tiên các bạn vào bảng eav_attribute và tìm attribute bạn muốn thông qua attribute_code.
  2. Dựa vào bước trên bạn sẽ biết được attribute_id, entity_type_idbackend_type. Các bạn mới tìm hiểu có thể ghi ra một tờ giấy cho dễ nhớ nhé.
  3. Dựa vào entity_type_id chúng ta sẽ tìm được bảng chứa dữ liệu của attribute thông qua bảng eav_entity_type. Ví dụ entity_type_id = 1 là bảng customer_entity, entity_type_id = 4 là bảng catalog_product_entity
  4. Sau đó dựa vào backend_type chúng ta biết được kiểu dữ liệu của attribute. Ví dụ: entity_type_id = 4 và backend_type = varchar thì chúng ta sẽ tìm dữ liệu của chúng ta bên trong bảng catalog_product_entity_varchar.
  5. Sau khi đã tìm được bảng chứa dữ liệu rồi chúng ta sẽ tìm kiếm theo attribute_id đã được xác định ở bước thứ 2. Thế là chúng ta đã biết được dữ liệu của chúng ta thêm vào được nằm ở đâu trong EAV rồi.

Kết luận

Bài viết vẫn còn nhiều thiếu sót, vì mình chỉ viết theo những gì mình biết và hiểu thôi. Còn nhiều thứ trong EAV mà mình còn chưa hiểu hoặc hiểu mà chẳng biết viết như thế nào. Mong mọi người có thể đóng góp thêm bằng cách để lại bình luận để bài viết được hoàn thiện hơn. Thanks.

Trả lời

Email của bạn sẽ không được hiển thị công khai.