Migrations trong Laravel là một công cụ mạnh mẽ cho phép bạn quản lý cơ sở dữ liệu của ứng dụng một cách dễ dàng và có tổ chức. Chúng cho phép bạn định nghĩa và sửa đổi cấu trúc cơ sở dữ liệu bằng cách sử dụng mã PHP thay vì SQL thuần túy. Bằng cách này, bạn có thể dễ dàng chia sẻ và theo dõi các thay đổi đối với cơ sở dữ liệu trong nhóm phát triển. Trong bài viết này, chúng ta sẽ tìm hiểu cách tạo và sử dụng migrations trong Laravel.

1. Cài đặt môi trường

Trước khi bắt đầu, hãy đảm bảo rằng bạn đã cài đặt Laravel và đã cấu hình kết nối đến cơ sở dữ liệu trong tệp .env. Đây là một ví dụ về cách cấu hình kết nối cơ sở dữ liệu:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=your_database
DB_USERNAME=your_username
DB_PASSWORD=your_password

2. Tạo Migration

2.1. Sử dụng lệnh Artisan

Để tạo migration, bạn có thể sử dụng lệnh Artisan make:migration. Cú pháp chung như sau:

php artisan make:migration create_table_name --create=table_name

Hoặc nếu bạn muốn tạo migration để sửa đổi một bảng đã tồn tại, bạn có thể sử dụng:

php artisan make:migration add_column_name_to_table_name --table=table_name

2.2. Ví dụ cụ thể

Giả sử bạn muốn tạo một bảng mới có tên posts. Bạn có thể chạy lệnh sau:

php artisan make:migration create_posts_table --create=posts

Nếu bạn muốn thêm một cột mới vào bảng users, bạn có thể chạy:

php artisan make:migration add_age_to_users_table --table=users

Sau khi thực hiện lệnh này, một tệp migration mới sẽ được tạo trong thư mục database/migrations với tên chứa thời gian tạo, ví dụ: 2024_10_07_123456_create_posts_table.php.

3. Định nghĩa cấu trúc bảng trong Migration

3.1. Mở tệp migration

Mở tệp migration mới được tạo trong thư mục database/migrations. Tệp sẽ có cấu trúc cơ bản như sau:

use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;

class CreatePostsTable extends Migration
{
    public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->id(); // Tạo cột id tự động tăng
            $table->string('title'); // Tạo cột title kiểu string
            $table->text('content'); // Tạo cột content kiểu text
            $table->timestamps(); // Tạo các cột created_at và updated_at
        });
    }

    public function down()
    {
        Schema::dropIfExists('posts'); // Xóa bảng posts nếu tồn tại
    }
}

3.2. Định nghĩa các cột

Trong phương thức up(), bạn sẽ định nghĩa các cột cho bảng của mình bằng cách sử dụng các phương thức của đối tượng Blueprint. Dưới đây là một số loại cột phổ biến mà bạn có thể sử dụng:

  • $table->id(): Tạo cột ID tự động tăng.
  • $table->string('name'): Tạo cột kiểu chuỗi.
  • $table->text('description'): Tạo cột kiểu văn bản.
  • $table->integer('age'): Tạo cột kiểu số nguyên.
  • $table->boolean('is_active'): Tạo cột kiểu boolean.
  • $table->timestamps(): Tạo hai cột created_atupdated_at.

4. Chạy Migration

Sau khi định nghĩa xong cấu trúc bảng trong tệp migration, bạn có thể chạy migration để tạo bảng trong cơ sở dữ liệu. Sử dụng lệnh sau:

php artisan migrate

Khi lệnh này được thực hiện, Laravel sẽ tạo bảng posts trong cơ sở dữ liệu của bạn dựa trên định nghĩa trong tệp migration.

5. Quản lý Migration

5.1. Lùi lại Migration

Nếu bạn muốn quay lại (rollback) migration, bạn có thể sử dụng lệnh sau:

php artisan migrate:rollback

Lệnh này sẽ quay lại migration cuối cùng mà bạn đã chạy.

5.2. Quay lại tất cả các Migration

Để quay lại tất cả các migration, bạn có thể sử dụng lệnh:

php artisan migrate:reset

5.3. Chạy lại tất cả các Migration

Nếu bạn muốn chạy lại tất cả các migration, bạn có thể sử dụng lệnh:

php artisan migrate:refresh

Lệnh này sẽ quay lại tất cả các migration và sau đó chạy lại chúng.

5.4. Xem trạng thái Migration

Để kiểm tra trạng thái của các migration, bạn có thể sử dụng lệnh:

php artisan migrate:status

Lệnh này sẽ hiển thị danh sách các migration và trạng thái của chúng (đã chạy hay chưa).

Kết luận

Migrations là một phần quan trọng trong việc quản lý cơ sở dữ liệu của ứng dụng Laravel. Chúng cung cấp một cách có tổ chức và dễ dàng để định nghĩa và thay đổi cấu trúc cơ sở dữ liệu mà không phải viết SQL thủ công. Với các lệnh Artisan tiện lợi, bạn có thể tạo, chạy, và quản lý migrations một cách hiệu quả.