Table of Contents
1.Lời mở đầu
Khi bạn đã Install hay Upgrade một module, làm thế nào để bạn có thể chỉnh sửa cấu trúc của bảng, hay thêm dữ liệu cho bảng?
Để làm được điều đó, hôm nay chúng ta hãy cùng tìm hiểu cách để chạy các sql script Install và Upgrade cho một module và ý nghĩa của các script này nhé.
Mô tả chung chung về các script này thì:
- InstallSchema - Class này sẽ được chạy khi module được install để tạo cấu trúc của bảng.
- InstallData - Class này được chạy khi module được install để init data cho bảng.
- UpgradeSchema - Class này được chạy khi module được upgrade và dùng để chỉnh sửa cấu trúc của bảng.
- UpgradeData - Class này được chạy khi module được upgrade và dùng để thêm hay xóa data của bảng.
- Recurring
- Uninstall
Tất cả các class sẽ được đặt ở thư mục app/code/Vendor/Module/Setup
script Install/Upgrade của module sẽ được chạy khi bạn chạy command line sau:
1
php bin/magento setup:upgrade
Ở bài viết này chúng ta sẽ sử dụng module
Learning_HelloWorld
để tạo bảng, sửa bảng, tạo và cập nhật dữ liệu cho module nhé (Xem thêm Create A New Module In Magento2)Let’s get started!
2.InstallSchema Script
- Class InstallSchema sẽ được chạy khi install module
- InstallSchema thường được dùng để tạo một bảng mới. Ví dụ dưới đây chúng ta sẽ tạo một bảng
learning_helloworld_post
File app/code/Learning/HelloWorld/Setup/InstallSchema.php
1 |
|
- Class InstallSchema phải được extends class \Magento\Framework\Setup\InstallSchemaInterface
- Class InstallSchema phải có phương thức method() với 2 tham số là SchemaSetupInterface và ModuleContextInterface
- SchemaSetupInterface sẽ chứa tất cả các hàm để tương tác với database, còn SchemaSetupInterface chứa duy nhất 1 method getVersion() trả về version hiện tại của module
- Trong ví dụ trên chúng ta đã tạo một bảng
learning_helloworld_post
với các cộtpost_id
,name
,url_key
,post_content
,tags
,status
,… với các kiểu dữ liệu Integer, Text, hay Timestamp…
3.InstallData Script
- InstallData sẽ được chạy sau InstallSchema trong quá trình install module, để thêm data vào bảng CSDL.
- Ví dụ dưới đây sẽ thêm bản ghi vào bảng
learning_helloworld_post
mà chúng ta vừa tạo.
File app/code/Learning/HelloWorld/Setup/InstallData.php
1 |
|
- Class InstallSchema sẽ có cùng concept với InstallSchema, chúng ta sẽ thêm bản ghi cho bảng ở trong hàm install.
- Ở đây chúng ta dùng ModelFactory
PostFactory
để tạo bản ghi cho bảnglearning_helloworld_post
. (Xem thêm về Model ở bài viết Models Trong Magento2)
4. UpgradeSchema Script
- Upgrade Script (Upgrade Schema và Upgrade Data) sẽ được chạy khi module được upgrade (nó cũng có thể được chạy khi module install nếu như có 2 class này ngay từ đầu).
- Upgrade Script sẽ khác với Install Script ở chỗ nó sẽ được chạy mỗi khi Module được upgrade.
- Vậy làm thế nào để phân biệt giữa các lần module được upgrade thì sẽ thực hiện hành vi gì tương ứng? Câu trả lời là chúng ta sẽ dựa vào version của module.
- Trong file upgrade chúng ta sẽ chỉ định version của module và so sánh với attribute setup_version trong file app/code/Learning/HelloWorld/etc/module.xml
File app/code/Learning/HelloWorld/Setup/UpgradeSchema.php
1 |
|
Class UpgradeSchema sẽ có phương thức upgrade nhận vào 2 tham số SchemaSetupInterface và ModuleContextInterface như class InstallSchema, method Upgrade này sẽ được chạy mỗi khi module được upgrade.
Như đã nói, chúng ta cũng sẽ thực hiện compare version để thêm script cho mỗi version.
$context->getVersion()
để lấy ra version hiện tại của module ở trong file module.xmlversion_compare($context->getVersion(), '1.2.0', '<')
có nghĩa là nếu version hiện tại nhỏ hơn “<”
1.2.0
thì sẽ thực hiện đoạn script này…Do đó lưu ý là mỗi khi muốn upgrade module chúng ta phải nâng version của module trong file module.xml
5. UpgradeData Script
- Class này tương tự như class Upgrade Schema, nó cũng được chạy mỗi khi module được upgrade.
- Upgrade Schema được dùng khi bạn muốn chỉnh sửa record trong bảng CSDL hay thêm record trong bảng.
- Install Data cũng làm điều này, tuy nhiện nó chỉ được chạy trong quá trình install của module. Do đó nếu module được install rồi thì bạn phải dùng UpgradeSchema để thực hiện.
File app/code/Learning/HelloWorld/Setup/UpgradeData.php
1 |
|
6. Tổng Kết
Bài viết này đến đây là hết rồi. Qua bài viết mình đã trình bày cách để chúng ta có thể tạo bảng, thêm dữ liệu cho bảng cũng như sửa bảng và sửa dữ liệu của bảng. Mong bài viết đơn giản này sẽ giúp các bạn hiểu hơn về ý nghĩa của các Install/Upgrade Script. Bài viết tiếp theo mình sẽ chia sẻ về một cách tạo bảng khác với Declarative Schema. So stay stune, hihi.
Bài viết tham khảo https://www.mageplaza.com/magento-2-module-development/magento-2-how-to-create-sql-setup-script.html
À hôm nay là 2-9 National Day, năm nay được nghỉ tận 4 ngày lận (dance). Hôm nay được nghỉ nhưng mình vẫn muốn productivity một chút. Cuối cùng thì đã viết xong bài viết này rồi (happy-face). It’s time to enjoy the holiday, tada. Giờ mình sẽ đi xem một bộ film cách mạng cho hợp với không khí của ngày Quốc Khánh, hihi. Mà đêm nay còn có trận bóng đá Vòng Loại 3 World Cup 2022 Vietnam-Saudi Arabia nữa. Hooray VIỆT NAM VÔ ĐỊCH