Cơ bản về Laravel Migration
Bài đăng này đã không được cập nhật trong 4 năm
Mở đầu
Bài viết này sẽ hướng dẫn cách sử dụng cơ bản của Laravel Migration.
Mục lục
Mở đầu
Môi trường
Add table để sử dụng trên Laravel
Rollback
Môi trường
Laravel
php artisan --version
Laravel Framework 5.8.16
Mysql
mysql> select version();
+-----------+
| version() |
+-----------+
| 5.7.28 |
+-----------+
1 row in set (0.00 sec)
Add table và sử dụng trên Laravel
① Tạo Table
- Chạy câu lệnh, nếu trả về Created Migration tức là đã tạo được.
$ php artisan make:migration create_tests_table
> Created Migration: yyyy_MM_dd_HHmms_create_tests_table
- File được tạo ra được đặt ngay dưới
project/database/migrations
. - Theo ví dụ ghi trên thì đã tạo ra file có tên là『yyyy_MM_dd_HHmms_create_tests_table.php』
② Chỉnh sửa file Migration
- Khi file đã được tạo, sẽ tiến hành thiết lập column muốn add thêm.
- Add thêm Name Column của varchar(128)
- Add thêm number của unsigned int
yyyy_MM_ddHHmmss_create_tests_table.php
class CreateTestsTable extends Migration
{
public function up()
{
Schema::create('tests', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name', 128)->nullable()
->comment('Name'); // varchar Character length 128
$table->integer('number')->nedned()
->comment('Number'); // int unsigned
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('tests');
}
}
③ Chạy Migration file
- Khi run câu lệnh dưới đây sẽ migrate table đã tạo ở database.
$ php artisan migrate
> Migrating: YYYY_MM_DD_ddHHmmss_tests_table
> Migrated: YYYY_MM_DD_ddHHmmss_tests_table
- Thử confirm phía Mysql xem đã migrate table được chưa.
mysql> DESCRIBE tests;
+------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------------------+------+-----+---------+----------------+
| id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(128) | YES | | NULL | |
| number | int(10) unsigned | NO | | NULL | |
| created_at | timestamp | YES | | NULL | |
| updated_at | timestamp | YES | | NULL | |
+------------+---------------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
④ Tạo Model để sử dụng trên Laravel
- Thực hiện tạo Model từ command line.
$ php artisan make:model Models/Test
>Model created successfully.
- Nếu chạy OK thì
Test.php
được tạo ngay dướiProject/app/Models/
.
Rollback
- Có thể rollback file migration đã chạy. Ví dụ, trường hợp muốn back về batch 1 ở trạng thái đã chạy migrations như dưới này.
mysql> select * from migrations;
+----+-----------------------------------------------------+-------+
| id | migration | batch |
+----+-----------------------------------------------------+-------+
| 1 | YYYY_MM_DD_HHIISS_create_test_logs | 1 |
| 2 | YYYY_MM_DD_HHIISS_create_sync_logs | 1 |
| 3 | YYYY_MM_DD_HHIISS_create_tests_table | 2 |
| 4 | YYYY_MM_DD_HHIISS_add_column_check_type | 3 |
+----+-----------------------------------------------------+-------+
- Để back về batch 1 thì cần back lại 2 batch, do đó, sẽ gắn thêm parameter vào ngay sau command
migration:rollback
để back về. - Nếu chạy command mà không có parameter thì sẽ chỉ back về batch ngay trước đó.
$ php artisan migrate:rollback --step=2
> Rolling back: YYYY_MM_DD_HHIISS_add_column_check_type
> Rolled back: YYYY_MM_DD_HHIISS_add_column_check_type
> Rolling back: YYYY_MM_DD_HHIISS_create_tests_table
> Rolled back: YYYY_MM_DD_HHIISS_create_tests_table
- Confirm xem đã back về chưa.
mysql> select * from migrations;
+----+-----------------------------------------------------+-------+
| id | migration | batch |
+----+-----------------------------------------------------+-------+
| 1 | YYYY_MM_DD_HHIISS_create_test_logs | 1 |
| 2 | YYYY_MM_DD_HHIISS_create_sync_logs | 1 |
+----+-----------------------------------------------------+-------+
- Confirm xem còn table không, nếu không còn là đã rollback thành công.
mysql> DESCRIBE tests;
ERROR 1146 (42S02): Table 'tests' doesn't exist
Link tham khảo: https://qiita.com/MochiMochiChip/items/364a2674290543fdda9c
All rights reserved