Top Posts
Gửi mail trong Magento 2 – Đính kèm...
Tạo grid trong Magento 2 sử dụng block
Tạo form admin sử dụng block
Cách sử dụng insertListing trong Magento 2
Compile LESS file với Grunt trong Magento 2
Magento 2 get product image url
Format price với currency trong Magento 2
Magento 2 Add URL Rewrite programmatically
Magento 2 Upload image admin form
Magento 2 Create Category Attribute
vi-magento.com
  • Magento 2
    • Magento 2 cơ bản
    • Bài tập Magento 2
    • Magento 2 Api
  • PHP
  • JavaScript
  • Cơ sở dữ liệu
    • Học MongoDB
    • SQL Server
    • Mysql
    • Học Oracle
    • SQLite
  • Liên hệ
  • Trắc nghiệm Magento 2
Trang chủ Lập trình Magento 2Magento cơ bản EAV Attribute trong Magento 2
Magento cơ bản

EAV Attribute trong Magento 2

bởi admin 27/06/2021
bởi admin 27/06/2021 0 Bình luận 673 xem

Khi tạo một product, customer…attribute bạn có bao giờ tự hỏi rằng các thuộc tính của attribute bạn vừa thêm vào được lưu ở đâu chưa. Trong bài viết này mình sẽ giới thiệu với các bạn về cách Magento sẽ lưu các attribute vào database như thế nào cũng như cách quản lý eav attribute.

Danh mục

  1. Ví dụ về tạo Eav Attribute (product attribute)
  2. EAV Attribute Mapping
  3. Các thuộc tính riêng của catalog, customer được lưu ở đâu
  4. Bài viết liên quan

Ví dụ về tạo Eav Attribute (product attribute)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$eavSetup = $this->eavSetupFactory->create(['setup' => $this->moduleDataSetup]);
 
$eavSetup->addAttribute('catalog_product', 'my_attribute', [
    'type' => 'int',
    'label' => 'My Attribute',
    'input' => 'text',
    'default' => 0,
    'global' => ScopedAttributeInterface::<em>SCOPE_STORE</em>,
    'visible' => true,
    'used_in_product_listing' => true,
    'user_defined' => true,
    'required' => false,
    'group' => 'General',
    'sort_order' => 80,
]);

Phía trên là một ví dụ về cách thêm product attribute đơn giản trong Magento 2. Nhưng sau khi attribute được tạo thì chúng lại được lưu vào bảng eav_attribute với tên khác với những gì chúng ta đã trình bày trong đoạn code trên. Cụ thể là:

EAV Attribute sau khi được tạo sẽ lưu vào bảng eav_attribute
EAV Attribute sau khi được tạo sẽ lưu vào bảng eav_attribute

Như các bạn có thể thấy các thuộc tính khi chúng ta tạo attribute và các cột trong bảng eav_attribute không hoàn toàn giống nhau. Vậy làm thế nào để Magento có thể lưu được các thuộc tính này một cách chính xác. Câu trả lời là do Magento đã map tên các thuộc tính đầu vào tương ứng với các cột trong bảng eav_attribute.

Các bạn có thể xem trong code core của Magento:

Interface: vendor/magento/module-eav/Model/Entity/Setup/PropertyMapperInterface.php
Eav: vendor/magento/module-eav/Model/Entity/Setup/PropertyMapper.php
Product: vendor/magento/module-catalog/Model/ResourceModel/Setup/PropertyMapper.php
Customer: vendor/magento/module-customer/Model/ResourceModel/Setup/PropertyMapper.php

Magento sẽ map các thuộc tính đầu vào tương ứng với các cột trong các bảng EAV Attribute.
Magento sẽ map các thuộc tính đầu vào tương ứng với các cột trong các bảng EAV Attribute.

EAV Attribute Mapping

vendor/magento/module-eav/Model/Entity/Setup/PropertyMapper.php phương thức map sẽ map các thông tin thuộc tính đầu vào tương ứng với các cột trong bảng eav_attribute. Đây là các thuộc tính chung cơ bản được sử dụng cho hầu hết các EAV Entity.

Thuộc tính trong Setup Script hoặc Data Patch Thuộc tính trong Database Giá trị mặc định của thuộc tính
attribute_model attribute_model null
backend backend_model null
type backend_type varchar
table backend_table null
frontend frontend_model null
input frontend_input text
label frontend_label null
frontend_class frontend_class null
source source_model null
required is_required 1
user_defined is_user_defined 0
default default_value null
unique is_unique 0
note note null
global is_global \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_GLOBAL

Ví dụ về mapping product: vendor/magento/module-catalog/Model/ResourceModel/Setup/PropertyMapper.php

Thuộc tính trong Setup Script hoặc Data Patch Thuộc tính trong Database Giá trị mặc định của thuộc tính
input_renderer frontend_input_renderer null
global is_global \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_GLOBAL
visible is_visible 1
searchable is_searchable 0
filterable is_filterable 0
comparable is_comparable 0
visible_on_front is_visible_on_front 0
wysiwyg_enabled is_wysiwyg_enabled 0
is_html_allowed_on_front is_html_allowed_on_front 0
visible_in_advanced_search is_visible_in_advanced_search 0
filterable_in_search is_filterable_in_search 0
used_in_product_listing used_in_product_listing 0
used_for_sort_by used_for_sort_by 0
apply_to apply_to null
position position null
used_for_promo_rules is_used_for_promo_rules 0
is_used_in_grid is_used_in_grid 0
is_visible_in_grid is_visible_in_grid 0
is_filterable_in_grid is_filterable_in_grid 0

Các thuộc tính riêng của catalog, customer được lưu ở đâu

Bảng eav_attribute chỉ lưu các thông tin chung của các EAV Entity (product, customer, customer address…). Nhưng mỗi Entity lại yêu cầu các dữ liệu khác nhau cho các thuộc tính của chúng. Ví dụ: thuộc tính “Used in layered navigation” chỉ hoạt động đối với products, còn các entity khác như customer… thì lại không.

Vì thế các thuộc tính chỉ được sử dụng cho catalog entity (product, category) sẽ được lưu vào một bảng riêng là catalog_eav_attribute. Mỗi dòng trong bảng catalog_eav_attribute sẽ được liên kết với dòng tương ứng trong bảng eav_attribute. Chúng được liên kết với nhau thông qua thuộc tính attribute_id.

Tương tự như thế đối với customer ta sẽ có bảng customer_eav_attribute để lưu các thuộc tính riêng cho customer attribute.

Bài viết tham khảo: https://belvg.com/blog/how-to-manage-eav-attributes-including-interface-source-backend-structure-in-magento-2.html

Bài viết liên quan

  • [Magento 2 cơ bản] Hướng dẫn thêm một Customer Attribute trong Magento 2
  • EAV trong Magento 2 | Magento 2 cơ bản
  • Bóc mẽ cách Magento tổ chức, thiết kế sản phẩm
  • Thuộc tính trong HTML
magento 2
Chia sẻ
0
FacebookSkype
Bài trước
Phân trang với Ajax, PHP và MYSQL
Bài tiếp theo
Cài đặt Magento 2.4 trên windows

Related Posts

Lợi ích và cách sử dụng Jquery trong...

20/09/2020

Magento 2 Các loại join và giải thích...

25/08/2020

Widget là gì? Hướng dẫn tạo custom widget...

03/09/2020

Hướng dẫn cài đặt Magento 2.4 trên Ubuntu

13/08/2020

Thêm Multi Select Filter trong Admin Grid

24/10/2020

Tạo popup modal trong Magento 2

19/09/2020

Filter Collection trong Magento 2

12/09/2020

Cách sử dụng insertListing trong Magento 2

14/08/2021
5 1 vote
Đánh giá
Login
guest
guest
0 Comments
Inline Feedbacks
View all comments

Bài viết cùng chủ đề

  • Hướng dẫn cài đặt Magento 2.4 trên Ubuntu

  • Hướng dẫn tạo Module trong Magento 2

  • Tạo Controller trong Magento 2 chi tiết nhất

  • Layout, Block, Template trong Magento 2

  • Layout trong Magento 2 – Hướng dẫn chi tiết

  • Plugin trong Magento 2 – Hướng dẫn chi tiết

  • Magento 2 thay đổi tên product sử dụng Plugin

  • Tạo bảng trong Magento 2 với Setup script

  • Tạo bảng với db_schema.xml trong Magento 2

  • Hướng dẫn cài đặt xdebug cho phpstorm trên ubuntu

  • Model, Resource Model và Collection trong Magento 2

  • Data Patch trong Magento 2 – Hướng dẫn chi tiết

  • Thêm Product Attribute Trong Magento 2

  • ACL trong Magento 2 – Hướng dẫn tạo ACL

  • Tạo Menu Admin trong Magento 2

  • Tạo system.xml trong Magento 2

  • Tạo form admin trong Magento 2 với Ui Component

  • Tạo Grid trong Magento 2 với Ui Component

  • Thêm, Xóa, Sửa dữ liệu trong Magento 2

  • Magento 2 Thêm Action Column trong Admin Grid

  • [Magento 2 cơ bản] Tìm hiểu về Events và Observers trong Magento 2

  • Tất tần tật danh sách các Events trong Magento 2

  • Bóc mẽ cách Magento tổ chức, thiết kế sản phẩm

  • Magento 2 Hướng dẫn tạo Cron Job

  • [Magento 2 cơ bản] Hướng dẫn thêm một Customer Attribute trong Magento 2

  • Magento 2 Đối tượng Factory

  • Cài đặt HTTPS (SSL) cho localhost dễ hiểu

  • Magento 2 Các loại join và giải thích chi tiết

  • Magento 2 Dependency Injection là gì? Tại sao phải sử dụng Dependency Injection?

  • Hướng dẫn thêm custom field ở trang checkout trong Magento 2

  • Sắp xếp danh sách sản phẩm theo price, name trong Magento 2

  • Magento 2 Add custom column into sales order grid

  • Magento 2 Cách sử dụng Knockout Js trong custom templates

  • Magento 2 Tìm hiểu về 6 loại product

  • Hướng dẫn thêm product type trong Magento 2

  • Các cách để override templates trong Magento 2

  • Widget là gì? Hướng dẫn tạo custom widget trong Magento 2

  • Tạo Admin User thông qua Command line trong Magento 2

  • Hướng dẫn lấy đường dẫn hiện tại, media, static trong Magento 2

  • Hướng dẫn sắp xếp danh sách sản phẩm theo lượt view trong Magento 2

  • Tìm hiểu về di.xml trong Magento 2

  • Filter Collection trong Magento 2

  • Các hàm xử lý dữ liệu trong Magento 2

  • Translate trong Magento 2

  • Tạo Source model trong Magento 2

  • Frontend model trong Magento 2 (system.xml)

  • Backend model trong Magento 2 (system.xml)

  • Magento 2 cơ bản – tự học magento 2

  • Tạo popup modal trong Magento 2

  • Thêm Custom Validate Rule trong Magento 2

  • Danh sách các validate rule trong Magento 2

  • Lợi ích và cách sử dụng Jquery trong Magento 2

  • Lưu custom data vào bộ nhớ cache | Magento 2

  • Truy vấn SQL trong Magento 2

  • Cách tạo Cronjob trong Magento2

  • Sử dụng Ajax với Knockout JS trong Magento 2

  • Sử dụng Ajax trong Magento 2

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

  • Hiểu Về Repository trong Magento 2

  • Hướng dẫn customize Magento 2 commands

  • Cách cài đặt zsh và zsh-autosuggestions trên Ubuntu

  • Thêm Multi Select Filter trong Admin Grid

  • Tạo admin grid với dữ liệu của nhiều table

  • Tìm hiểu về indexing trong magento 2

  • Quản lý indexer – các command cần thiết

  • Message queue trong magento 2

  • Theme trong Magento 2

  • Linux Là Gì?

  • Phân biệt Salable Quantity và Quantity trong Magento 2

  • Magento 2 Tìm hiểu về Proxy

  • Cài đặt Magento 2.4 trên windows

  • Magento 2 – Kiểm tra customer đã đăng nhập hay chưa?

  • Thêm Command Console Trong Magento 2

  • Các lệnh cơ bản trong Magento 2 mà lập trình viên cần phải biết

  • Tạo Custom Indexer Trong Magento 2

  • Magento 2 Create Category Attribute

  • Magento 2 Upload image admin form

  • Magento 2 Add URL Rewrite programmatically

  • Format price với currency trong Magento 2

  • Magento 2 get product image url

  • Compile LESS file với Grunt trong Magento 2

  • Cách sử dụng insertListing trong Magento 2

  • Tạo form admin sử dụng block

  • Tạo grid trong Magento 2 sử dụng block

  • Gửi mail trong Magento 2 – Đính kèm file

@2020 - All Right Reserved. vi-magento.com

vi-magento.com
  • Magento 2
    • Magento 2 cơ bản
    • Bài tập Magento 2
    • Magento 2 Api
  • PHP
  • JavaScript
  • Cơ sở dữ liệu
    • Học MongoDB
    • SQL Server
    • Mysql
    • Học Oracle
    • SQLite
  • Liên hệ
  • Trắc nghiệm Magento 2
wpDiscuz