Laravel 08: Database migration

Laravel là một framework rất mạnh để chúng ta dựng một web app tầm cỡ bao gồm cả back-end và front-end. Lẽ dĩ nhiên như trái đất tròn, chúng ta cần phải có database để thực hiện các thao tác CRUD, vì nếu không, tất cả chỉ là static web mà thôi. Vì Laravel là một PHP framework, điều hiển nhiên Laravel sẽ thao tác với MySQL database. Tuy nhiên, chúng ta không thao tác với các câu lệnh SQL như CREATE TABLE hay INSERT INTO. Thay vào đó, chúng ta thao tác với migrations và Eloquent Models.

Nhưng trước hết, chúng ta cần tạo một database. Cách dễ nhất là sử dụng phpmyadmin, nhưng Laravel cung cấp cho chúng ta một công cụ mạnh và dễ dàng hơn rất nhiều, đó là migrations. Không chỉ giúp bạn tạo database, migrations còn đóng vai trò version control tương tự như git cho db nữa. Để xem các migrations, bạn mở thư mục database/migrations. Bây giờ, bạn mở tập tin create_users_table để xem một migration mẫu. Hãy chú ý vào hai hàm up và down:

Hàm up sẽ được gọi khi chúng ta bắt đầu thực thi migration, và down sẽ được gọi khi ta gọi rollback. Nhìn sơ lược, bạn có thể hiểu nội dung của up là tạo một table có tên là ‘users’ với các cột là id, name (varchar), email (varchar, primary key), v.v… Còn down chỉ đơn giản là bỏ table mà thôi.

Chúng ta sẽ tiến hành tạo một migration của chính mình, với table được tạo có tên là ‘posts’. Để yêu cầu laravel thực thi yêu cầu, bạn chạy command bên dưới:

Bạn điều chỉnh nội dung của class CreatePostTable như bên dưới. Chúng ta sẽ tạo thêm 4 cột ‘title’, ‘content’, ‘author’‘category’. Tất cả đều thuộc kiểu varchar hay String.

Để thực thi các migrations, trước tiên, bạn cần khởi động MySQL db qua XAMP trước. Mặc định, Laravel sẽ tạo một db có tên là ‘laravel’ và lưu các migration table vào đó. Nếu bạn muốn chỉ định tên khác cho db, bạn truy cập tập tin .env và thay đổi giá trị DB_DATABASE là được. Trong loạt bài này, tôi sẽ sử dụng giá trị mặc định để bạn tiện thực hiện và theo dõi. Sau đó, bạn chạy command bên dưới là xong:

Kiểm tra lại db trong phpmyadmin, chúng ta có một db mới tên là ‘laravel’ cùng các bảng tương ứng với các migrations. Để xem status của các migrations, bạn chỉ cần run migrate:status, và output sẽ tương tự như bên dưới:

Bạn cần lưu ý Batch, nó tương tự như commit của git, hay nếu bạn nào đã code android thì nó tương tự như versionCode hay Bundle version của iOS. Để rollback lại, bạn chỉ cần đơn giản chạy command bên dưới và posts table sẽ bị xóa, tức hàm CreatePostTable@down sẽ được gọi.

Như vậy, chúng ta đã tạm xong về phần database. Tất nhiên, chúng ta còn một số câu lệnh khác với migrate cũng như các hàm khác của $table, nhưng vì thời lượng của bài viết có hạn, tôi dừng lại ở đây và sẽ đưa tất cả links đầy đủ ở bài viết cuối cùng. Trước khi chia tay, một lần nữa, bạn hãy đừng xóa project, vì chúng ta sẽ bắt đầu createread vào chính ‘laravel’ database và ‘posts’ table thông qua Eloquent Models trong bài sau.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.