Magento 2.3 quản lý cập nhật database kiểu gì

Magento 2.3 đã chuyển sang dùng db_schema.xml để quản lý việc tạo database thay vì Setup/InstallSchemaUpgradeSchema.

Việc sử dụng db_schema.xml tạo điều kiện cho chúng ta tạo database dễ dàng hơn rất nhiều. Ví dụ như ngày trước, chúng ta khi cần thêm 1 cột vào database, ta phải nâng version, dùng câu lệnh addColumn.

Điều này khá phiền phức, ở db_schema.xml, ta chỉ cần thêm 1 trường vào file xml và chạy lệnh setup:upgrade là đủ. Magento sẽ tự thêm cột cho chúng ta mà ko cần phải code thêm file nào nữa.

Magento 2.3 quản lý cập nhật database kiểu gì

Và điều này đã khiến magento đã remove setup_version trong module.xml. Từ magento 2.3, version của module chỉ được viết trong composer.json.

Magento 2.3 quản lý cập nhật database kiểu gì

Vậy khi chúng ta cần thêm data, hoặc viết các câu lệnh php (xml thì không thể xử lý logic if else) thì làm thế nào để thay thế cho UpgradeSchema và UpgradeData? Khi ta không còn version trong setup_version nữa, ta không thể nào dùng version_compare để check điều kiện chạy lệnh được

if (version_compare($context->getVersion(), '0.1.0.20', '<')) {
   $this->customSaleHelper->createProduct($setup);
}

Vậy magento dùng gì để quản lý sao cho:

  • Đã chạy upgrade 1 lần rồi thì lần sau không chạy lại đoạn lệnh đó nữa (ko còn check điều kiện compare version < được )
  • Thứ tự chạy thế nào , cái nào trước cái nào sau?

Và đây là cơ chế

image

Mọi người sẽ thấy thư mục Patch ở Setup. Bên trong sẽ chứa các đoạn code php

image

Mỗi file ứng với 1 công việc. Thú tự chạy được quy định ở phần dependence:

image

Ví dụ để chạy file này, cần chạy file trong dependencies kia trước.

Và một điều nữa là, sau khi chạy rồi, làm thế nào để lần sau không chạy lại nữa ?
Đây là giải thích :
Khi 1 file patch được chạy, 1 record sẽ được lưu trong bảng patch_list:

image

Và tất nhiên, patch này đã được lưu vào trong bảng này rồi, lần chạy setup:upgrade tiếp theo magento sẽ check và không chạy lại nữa.

Lưu ý một điều là patch sẽ được chạy sau db_schema.xml.

Trên đây là 1 cơ chế rất hay của magento 2.3. Hy vọng bài viết sẽ giúp ích được cho mọi người

Tuyển dụng Magento Developer làm sản phẩm cho thị trường quốc tế và hướng đến giá trị cao nhất cho người sử dụng. Working Remote làm việc bất cứ địa điểm nào bạn thích, Quản lý linh hoạt theo Agile

Hãy đăng ký nhận tin để là người đầu tiên đọc bài viết mới nhất từ chúng tôi nhé

Posted 
Sep 7, 2020
 in 
Tech
 category

Bài viết khác từ

Tech

category

View All