Ở bài trước, chúng ta đã kết nối thành công Laravel với MySQL và chạy các Migration mặc định của hệ thống.
Trong bài học này, chúng ta sẽ tìm hiểu sâu hơn về Migration – một trong những tính năng quan trọng nhất của Laravel.
Thay vì tạo bảng trực tiếp bằng phpMyAdmin, Laravel cho phép chúng ta quản lý toàn bộ cấu trúc cơ sở dữ liệu bằng mã nguồn.
Điều này giúp dự án dễ bảo trì, dễ chia sẻ và đồng bộ giữa các thành viên trong nhóm.
Migration là gì?
Migration là các file PHP dùng để tạo hoặc thay đổi cấu trúc cơ sở dữ liệu.
Có thể xem Migration như "lịch sử thay đổi" của Database. Mỗi khi cần tạo bảng mới, thêm cột hoặc xóa cột, chúng ta chỉ cần tạo một Migration mới thay vì chỉnh sửa trực tiếp trên cơ sở dữ liệu.
Nhờ vậy, mọi thay đổi đều được lưu lại và có thể hoàn tác khi cần.
Tạo Migration
Để tạo một Migration mới, sử dụng Artisan:
php artisan make:migration create_posts_table
Sau khi chạy lệnh, Laravel sẽ tạo một file trong thư mục:
database/
└── migrations/
Tên file sẽ có dạng:
2026_07_08_101530_create_posts_table.php
Phần thời gian ở đầu giúp Laravel biết thứ tự thực thi các Migration.
Cấu trúc của Migration
Một Migration gồm hai phương thức chính:
public function up(): void
{
//
}
public function down(): void
{
//
}
up(): Thực hiện thay đổi (tạo bảng, thêm cột...).
down(): Hoàn tác thay đổi (xóa bảng, xóa cột...).
Laravel sẽ gọi up() khi chạy Migration và gọi down() khi Rollback.
Tạo bảng đầu tiên
Ví dụ tạo bảng posts:
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('content');
$table->timestamps();
});
Ý nghĩa:
id()tạo khóa chính tự tăng.string()tạo cột chuỗi.text()dùng cho nội dung dài.timestamps()tạo hai cột:created_atupdated_at
Sau khi chạy Migration, Laravel sẽ tự động tạo bảng posts.
Các kiểu dữ liệu phổ biến
Laravel hỗ trợ rất nhiều kiểu dữ liệu.
Một số kiểu thường gặp:
$table->string('name');
$table->text('content');
$table->integer('price');
$table->boolean('status');
$table->date('birthday');
$table->timestamp('published_at');
$table->float('score');
$table->decimal('amount',10,2);
Việc lựa chọn đúng kiểu dữ liệu sẽ giúp cơ sở dữ liệu hoạt động hiệu quả hơn.
foreignId()
Trong các dự án thực tế, các bảng thường liên kết với nhau.
Ví dụ:
Một User có nhiều Post.
Một Category có nhiều Post.
Laravel hỗ trợ tạo khóa ngoại rất đơn giản:
$table->foreignId('user_id')
->constrained()
->cascadeOnDelete();
Lệnh trên tương đương với:
tạo cột
user_idtạo Foreign Key
tham chiếu đến bảng
userstự động xóa dữ liệu liên quan khi User bị xóa.
Nếu tham chiếu đến bảng khác:
$table->foreignId('category_id')
->constrained('categories');
Đây là cách được khuyến nghị trong các dự án Laravel hiện đại.
Chạy Migration
Sau khi hoàn thành Migration:
php artisan migrate
Laravel sẽ đọc file Migration mới và thực hiện các thay đổi lên Database.
Những Migration đã chạy sẽ không bị chạy lại.
Rollback Migration
Nếu tạo sai bảng hoặc cần quay lại trạng thái trước đó:
php artisan migrate:rollback
Laravel sẽ gọi phương thức:
down()
để hoàn tác Migration gần nhất.
Làm mới toàn bộ Database
Trong quá trình học tập, đôi khi chúng ta muốn xóa toàn bộ bảng và tạo lại từ đầu.
php artisan migrate:fresh
Lệnh này sẽ:
Xóa tất cả bảng.
Chạy lại toàn bộ Migration.
Nếu muốn tạo dữ liệu mẫu luôn:
php artisan migrate:fresh --seed
Lệnh này rất hữu ích trong quá trình phát triển.
Một số quy tắc đặt tên
Laravel có quy ước đặt tên Migration:
create_posts_table
create_categories_table
create_users_table
Khi thêm cột:
add_status_to_posts_table
Đặt tên đúng quy ước giúp người khác dễ hiểu mục đích của Migration.
Những lưu ý khi sử dụng Migration
Không chỉnh sửa trực tiếp Database nếu dự án đang quản lý bằng Migration.
Mỗi thay đổi nên tạo một Migration mới thay vì sửa Migration cũ đã được chia sẻ.
Thường xuyên sao lưu dữ liệu trước khi chạy các lệnh như
migrate:fresh.Kiểm tra kỹ khóa ngoại để tránh lỗi khi tạo bảng.
Tổng kết
Trong bài học này, chúng ta đã tìm hiểu:
Migration là gì.
Cách tạo Migration bằng Artisan.
Cấu trúc của một file Migration.
Các kiểu dữ liệu thường dùng.
Tạo khóa ngoại với
foreignId().Chạy Migration.
Rollback Migration.
Làm mới toàn bộ Database.
Ở bài tiếp theo, chúng ta sẽ học Seeder, sử dụng Faker để tạo dữ liệu mẫu và tự động thêm dữ liệu vào cơ sở dữ liệu, giúp việc phát triển và kiểm thử ứng dụng trở nên nhanh chóng hơn.
x0




Không có nhận xét nào:
Đăng nhận xét