マイグレートとロールバック

メモ:

マイグレーションによるテーブルの作成とロールバックについてみていきます。

マイグレーション

「 php artisan migrate 」コマンドを実行することで、テーブルが作成されるのですがこれと同時にマイグレーションの管理用テーブルも更新されます。

データベースには、マイグレーションファイルで定義したテーブル以外に「 migrations 」テーブルが用意されます。

mysql> show tables;
+---------------------+
| Tables_in_homestead |
+---------------------+
| migrations          |
| users               |
+---------------------+
2 rows in set (0.00 sec)

テーブルの作成・更新を行うたびに「 migrations 」テーブルに履歴が作成されていきます。

mysql> select * from migrations;
+----+-------------------------------------------------------+-------+
| id | migration                                             | batch |
+----+-------------------------------------------------------+-------+
|  1 | 2018_11_05_180158_create_users_table                  |     1 |
|  2 | 2018_11_05_215234_add_column_is_active_to_users_table |     1 |
+----+-------------------------------------------------------+-------+
2 rows in set (0.00 sec)

ロールバック

ロールバックを行うには、次のコマンドを実行します。

$ php artisan migrate:rollback

コマンドを実行すると最後に実行したマイグレーションファイルに定義した down(ロールバック処理) が実行され「 migrations 」テーブルのレコードも更新されます。

mysql> select * from migrations;
+----+-------------------------------------------------------+-------+
| id | migration                                             | batch |
+----+-------------------------------------------------------+-------+
|  1 | 2018_11_05_180158_create_users_table                  |     1 |
+----+-------------------------------------------------------+-------+
2 rows in set (0.00 sec)

複数定義分戻したい場合は、 step オプションをつけ戻したい定義数を指定します。

$ php artisan migrate:rollback --step=3

全てなかったことにしたい場合は、 reset とします。

$ php artisan migrate:reset

他にも migrate:refresh コマンドなどがあります。