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