スポンサーリンク

[Laravel] マイグレーションのロールバックで巻き戻すやり方

概要

マイグレーションのロールバック機能を使って、DBの状態を巻き戻します。内部的には、順番にdownメソッドを呼び出して処理していく動きになります。

DBの状況確認

まずは、DBのマイグレーションがどのように行われている状態かを確認します。
コマンドプロンプト等で以下のようにmysqlにログイン、対象DBに接続します。
その後、sqlを実行して、migrationsテーブルの中身を見ると、どのマイグレーションファイルが実行済みかどうかが確認できます。

C:\>mysql -u root -p
MariaDB [none]> use laravel
MariaDB [laravel]> select * from migrations;
+----+-------------------------------------------------------+-------+
| id | migration                                             | batch |
+----+-------------------------------------------------------+-------+
|  1 | 2014_10_12_000000_create_users_table                  |     1 |
|  2 | 2014_10_12_100000_create_password_resets_table        |     1 |
|  3 | 2019_08_19_000000_create_failed_jobs_table            |     1 |
|  4 | 2019_12_14_000001_create_personal_access_tokens_table |     1 |
|  5 | 2022_01_04_035005_create_employees_table              |     2 |
+----+-------------------------------------------------------+-------+
5 rows in set (0.021 sec)

ロールバック(巻き戻し)

コマンドプロンプトに戻り、artisanコマンドでロールバックします。

php artisan migrate:rollback

上記コマンドで、1batch分ロールバックすることができます。

php artisan migrate:rollback --step=1

どのbatchまで戻るかは、上記のように指定することもできます。
全てロールバックするならstepに*を指定すると、全てロールバックします。

> php artisan migrate:rollback
Rolling back: 2022_01_04_035005_create_employees_table
Rolled back:  2022_01_04_035005_create_employees_table (21.18ms)

MariaDB [laravel]> select * from migrations;
+----+-------------------------------------------------------+-------+
| id | migration                                             | batch |
+----+-------------------------------------------------------+-------+
|  1 | 2014_10_12_000000_create_users_table                  |     1 |
|  2 | 2014_10_12_100000_create_password_resets_table        |     1 |
|  3 | 2019_08_19_000000_create_failed_jobs_table            |     1 |
|  4 | 2019_12_14_000001_create_personal_access_tokens_table |     1 |
+----+-------------------------------------------------------+-------+
4 rows in set (0.000 sec)

普通のロールバックを実行すると、batch1つ分のマイグレーションファイルのロールバックが行われました。