Chuyển tới nội dung
Trang chủ » Data Patch trong Magento 2 – Hướng dẫn chi tiết

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

Kể từ phiên bản 2.3, Magento giới thiệu Data Patch để sửa đổi dữ liệu như là một thay thế cho InstallData và UpgradeData. Một Data Patch được đặt trong Vendor/Module_Name/Setup/Patch/Data/Patch_Name.php và implements MagentoFrameworkSetupPatchDataPatchInterface. Trong bài viết này chúng ta sẽ cùng nhau đi tìm hiểu về cách sử dụng Data Patch trong Magento 2.

Không giống như declarative schema, Patch chỉ được áp dụng một lần và được lưu trữ trong bảng patch_list trong cơ sở dữ liệu. Những Patch chưa được áp dụng sẽ được áp dụng khi chạy câu lệnh php bin/magento setup:upgrade.

Tạo Data Patch trong Magento 2

Để tạo một Data Patch trong Magento 2 đầu tiên chúng ta phải tạo một file bên trong thư mục Setup/Patch

Tạo file: ViMagento/HelloWorld/Setup/Patch/Data/AddProductAttribute.php

Vừa rồi tôi dùng Data Patch để thêm một product attribute. Trong đó:

  • apply() là function chính, mọi sửa đổi bạn muốn sẽ được viết ở đây
  • getDependencies() định nghĩa những phụ thuộc của patch. Ví dụ:

  • getAliases() tên định danh cho patch

Kích hoạt Data Patch

Chạy câu lệnh php bin/magento setup:upgrade sau đó truy cập trang admin của bạn vào Catalog > Product > Add Product

Thêm Product Attribute với Data Patch trong Magento 2
Thêm Product Attribute trong Magento 2

Và đây là table patch_list sẽ lưu tất cả các patch đã áp dụng

Bảng patch_list chứa danh sách các Data Patch đã được cài đặt trong Magento 2
Bảng patch_list chứa danh sách các Patch đã được cài đặt trong Magento 2

Lưu ý patch chỉ chạy một lần, Nếu bạn muốn sửa đổi dữ liệu thì bạn có thể tạo một file mới hoặc xóa record vừa tạo trong bảng patch_list và chạy setup:upgrade lại

Kết luận

Sau khi học xong bài này các bạn hãy sử dụng Data Patch để thay cho Setup Script nhé. Các bạn có thể tham khảo bài viết này để biết thêm chi tiết: https://devdocs.magento.com/guides/v2.4/extension-dev-guide/declarative-schema/data-patches.html

Trả lời

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