(Laravel) migrationやり直しコマンドあれこれ

(Laravel) migrationやり直しコマンドあれこれ

 

laravelのマイグレーションのやり直し方がよく分からず、調べたので、メモ。

 

laravelマイグレーションやり直しコマンド一覧

まずはマイグレーションやり直しコマンドの一覧から紹介する。

やり直しコマンドには複数のコマンドが存在するが、いずれも以下のように、
php artisan migrate:コマンド と言う風に入力して使用する。

# laravelのマイグレーションコマンドの実行方法

php artisan migrate:コマンド

 

コマンドに相当する部分の一覧は下記。

マイグレーションやり直しコマンド一覧
  1. status   マイグレーションの状態確認
  2. rollback  直前のマイグレーションをロールバック
  3. reset    すべてのマイグレーションをロールバック
  4. refresh   すべてのマイグレーションをロールバックしmigrateを実行。
  5. fresh      すべてのテーブルを削除しmigrateを実行。

 

上記の使い方について順番に説明していく。

あと参考までに、通常のマイグレーション手順については以下の記事にまとめてあるので、
おさらいがてら読んでみて欲しい。

 

migrationテーブルの見方

説明をしていく前に、
laravelのmigrationsテーブルの見方を理解しておいてもらいたい。
migrationsテーブルは、マイグレーションの実施履歴を保持するテーブルだ。

マイグレーションファイル毎にレコードが存在する。
batchカラムには、ファイルがmigrateされた順番が保持されている。
以下では、create_characters_tableファイルが直近で実行されたということだ。

+------+------------------------------------------------+-------+
| Ran? | Migration                                      | Batch |
+------+------------------------------------------------+-------+
| Yes  | 2014_10_12_000000_create_users_table           | 1     |
| Yes  | 2014_10_12_100000_create_password_resets_table | 1     |
| Yes  | 2019_08_19_000000_create_failed_jobs_table     | 1     |
| Yes  | 2021_01_03_105018_create_skills_table          | 2     |
| Yes  | 2021_01_03_111401_create_characters_table      | 3     |  #直近のマイグレーション(3回マイグレーションが行われたうちの3回目)
+------+------------------------------------------------+-------+

 

migrate後は、Ran?カラムにYesがつく。

 




① php artisan migrate:status

マイグレーションの状態を確認する。
見ての通り、migrationテーブルの結果を表示するコマンドだ。
特に問題はない–だろう。

php artisan migrate:status
+------+------------------------------------------------+-------+
| Ran? | Migration                                      | Batch |
+------+------------------------------------------------+-------+
| Yes  | 2014_10_12_000000_create_users_table           | 1     |
| Yes  | 2014_10_12_100000_create_password_resets_table | 1     |
| Yes  | 2019_08_19_000000_create_failed_jobs_table     | 1     |
| Yes  | 2021_01_03_105018_create_skills_table          | 2     |
| Yes  | 2021_01_03_111401_create_characters_table      | 3     |
+------+------------------------------------------------+-------+

 

② php artisan migrate:rollback

rollbackは、直前に行った一連のマイグレーションをなかったことにするコマンド
rollbackを実施すると、マイグレーションファイルのdown()メソッドに書かれた処理が実行される。

先ほどのDBではbatchが3のマイグレーションがロールバックされ、状態は「No」と表示される

php artisan migrate:rollback

ロールバックが実行されるとRanのところが「No」と表示されます。

+------+------------------------------------------------+-------+
| Ran? | Migration                                      | Batch |
+------+------------------------------------------------+-------+
| Yes  | 2014_10_12_000000_create_users_table           | 1     |
| Yes  | 2014_10_12_100000_create_password_resets_table | 1     |
| Yes  | 2019_08_19_000000_create_failed_jobs_table     | 1     |
| Yes  | 2021_01_03_105018_create_skills_table          | 2     |
| No   | 2021_01_03_111401_create_characters_table      |       |
+------+------------------------------------------------+-------+

 

–stepオプション

–step=[数値]のオプションを指定することで、[数値]回のロールバックを行うことができる。

$ php artisan migrate:rollback --step=[数値]

 

batchの値が3の場合で、–step=2をするとbatchが1の状態までロールバックする。

 

③ php artisan migrate:reset

resetは、すべてのマイグレーションをロールバックするコマンド。

$ php artisan migrate:reset
$ php artisan migrate:rollback
Rolling back: 2021_01_03_111401_create_characters_table
Rolled back:  2021_01_03_111401_create_characters_table (0.04 seconds)
Rolling back: 2021_01_03_105018_create_skills_table
Rolled back:  2021_01_03_105018_create_skills_table (0.01 seconds)
Rolling back: 2019_08_19_000000_create_failed_jobs_table
Rolled back:  2019_08_19_000000_create_failed_jobs_table (0.07 seconds)
Rolling back: 2014_10_12_100000_create_password_resets_table
Rolled back:  2014_10_12_100000_create_password_resets_table (0.03 seconds)
Rolling back: 2014_10_12_000000_create_users_table
Rolled back:  2014_10_12_000000_create_users_table (0.03 seconds)
$ php artisan migrate:status  
+------+------------------------------------------------+-------+
| Ran? | Migration                                      | Batch |
+------+------------------------------------------------+-------+
| No   | 2014_10_12_000000_create_users_table           |       |
| No   | 2014_10_12_100000_create_password_resets_table |       |
| No   | 2019_08_19_000000_create_failed_jobs_table     |       |
| No   | 2021_01_03_105018_create_skills_table          |       |
| No   | 2021_01_03_111401_create_characters_table      |       |
+------+------------------------------------------------+-------+

すべてのマイグレーションの状態が「No」となる。
マイグレーションを一度もしなかったことになると言うこと。

 

④ php artisan migrate:refresh

refreshは、
すべてのマイグレーションをロールバックしてから再びマイグレーションするコマンド

$ php artisan migrate:refresh
$ php artisan migrate:refresh

$ php artisan migrate:refresh
Rolling back: 2021_01_03_111401_create_characters_table
Rolled back:  2021_01_03_111401_create_characters_table (0.01 seconds)
Rolling back: 2021_01_03_105018_create_skills_table
Rolled back:  2021_01_03_105018_create_skills_table (0 seconds)
Rolling back: 2019_08_19_000000_create_failed_jobs_table
Rolled back:  2019_08_19_000000_create_failed_jobs_table (0.01 seconds)
Rolling back: 2014_10_12_100000_create_password_resets_table
Rolled back:  2014_10_12_100000_create_password_resets_table (0.01 seconds)
Rolling back: 2014_10_12_000000_create_users_table
Rolled back:  2014_10_12_000000_create_users_table (0.01 seconds)
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table (0.08 seconds)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table (0.09 seconds)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated:  2019_08_19_000000_create_failed_jobs_table (0.05 seconds)
Migrating: 2021_01_03_105018_create_skills_table
Migrated:  2021_01_03_105018_create_skills_table (0.05 seconds)
Migrating: 2021_01_03_111401_create_characters_table
Migrated:  2021_01_03_111401_create_characters_table (0.06 seconds)

 

⑤ php artisan migrate:fresh

freshは、すべてのテーブルをドロップ(削除)してから再びマイグレーションするコマンド

$ php artisan migrate:fresh

Dropped all tables successfully.
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table (0.08 seconds)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table (0.09 seconds)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated:  2019_08_19_000000_create_failed_jobs_table (0.05 seconds)
Migrating: 2021_01_03_105018_create_skills_table
Migrated:  2021_01_03_105018_create_skills_table (0.05 seconds)
Migrating: 2021_01_03_111401_create_characters_table
Migrated:  2021_01_03_111401_create_characters_table (0.06 seconds)

 

refreshと異なるのはロールバックが行われないこと。
つまりdown()メソッドが実行されずにDBの再構築が行われる。

refreshとfreshの違い
  • refresh:全てのテーブルをロールバックしてからマイグレーション
  • fresh  : 全てのテーブルをドロップ(削除)してからマイグレーション

 

まとめ

  • status マイグレーションの状態確認
  • rollback 直前のマイグレーションをロールバック
  • reset すべてのマイグレーションをロールバック
  • refresh すべてのマイグレーションをロールバックしmigrateを実行
  • fresh すべてのテーブルを削除しmigrateを実行

 

 

(Docker×Laravel) データベース作成〜マイグレーションする手順

 

https://www.docker.com/

 

 

 

記事が気に入った方はシェアをお願いします!

コメントを残す

メールアドレスが公開されることはありません。