Laravel マイグレーションコマンド まとめ
はじめに
ユニットテストで利用可能なRefreshDatabase
トレイト、DatabaseMigrations
トレイトで動いているマイグレーションコマンドがどのような動きをするのか調べる機会があったのでちょっとまとめてみました。
環境
- Laravel 9.46.0
コマンド一覧
make:migration
$ php artisan make:migration ファイル名
マイグレーションファイルの作成する。
migrate
$ php artisan migrate
マイグレーションを実行する。
$ php artisan migrate --pretend
--pretend
オプションを付けると、実行するSQL文の確認できる。
その場合、SQLは実行されない。
下記の記事に--pretend
オプションを試した内容が書いてあります。
migrate:rollback
$ php artisan migrate:rollback
最後に実行したマイグレーションの実行をロールバックする。
$ php artisan migrate:rollback --step=3
--step
オプションを指定した場合、指定した数だけロールバックが実行される。
migrate:reset
$ php artisan migrate:reset
すべてのマイグレーションの実行をロールバックする。
migrate:refresh
$ php artisan migrate:refresh
migrate:reset
コマンドを実行し、migrate
コマンドを実行する。
$ php artisan migrate:refresh --step=3
--step
オプションを付けるとmigrate:reset
コマンドではなく、migrate:rollback
コマンドを実行し、migrate
コマンドを実行する。
migrate:fresh
$ php artisan migrate:fresh
すべてのテーブルを削除し、migrate
コマンドを実行する。
テーブルの削除にはdb:wipe
コマンドを実行している。
ただし、削除されるのは、--database
オプションで指定したデータベースのみ。
未指定の場合はデフォルトの接続先になる。
migrate:install
$ php artisan migrate:install
migrations
テーブルを作成する。
テーブル名はここで変更が可能
このコマンドは直接実行することはなく、migrate
コマンドから実行される。
migrate:status
$ php artisan migrate:status
実行したマイグレーションを確認する。
まとめ
今更ながら、調べてみて、
migrate:reset
、migrate:refresh
、migrate:fresh
の3つコマンドの動きの違いがわかりました。
また、RefreshDatabase
トレイト、DatabaseMigrations
トレイト共にテスト開始時にmigrate:fresh
コマンドを実行していたんですね。
RefreshDatabase
トレイトは名前の通りmigrate:refresh
コマンドを実行していると思っていたんですが違ったようです。
こういう調べものは、間違えを直せたりできるので違う内容でまたやりたいと思います。
Discussion