Laravel で特定のマイグレーションだけをロールバックはできるのか?複数のマイグレーション実行の場合

Laravel database sql

たとえば1回のマイグレーション実行で3つのマイグレーションファイルが実行される場合。

php artisan migrateとやるとどうしても3つが同時に実行されますよね。

root@6c523dcb4f04:/var/www# php artisan migrate
Migrating: 2022_07_24_151322_test1
Migrated: 2022_07_24_151322_test1 (11.36ms)
Migrating: 2022_07_24_151435_test2
Migrated: 2022_07_24_151435_test2 (0.22ms)
Migrating: 2022_07_24_151524_test3
Migrated: 2022_07_24_151524_test3 (0.74ms)

root@6c523dcb4f04:/var/www# php artisan migrate:rollback
Rolling back: 2022_07_24_151524_test3
Rolled back: 2022_07_24_151524_test3 (55.93ms)
Rolling back: 2022_07_24_151435_test2
Rolled back: 2022_07_24_151435_test2 (0.24ms)
Rolling back: 2022_07_24_151322_test1
Rolled back: 2022_07_24_151322_test1 (0.19ms)

これでtest2, test3のマイグレーションだけは活かして、test1だけのマイグレーションをrollbackするこはできるのか?

答えはNoです。
できません!

マイグレーションはどうしてもその前のマイグレーションありきで、そこからの変更をするため

先に実行されているマイグレーションだけを取り消す、rollbackすることはできません。

 

ただし、逆にtest2, test3はrollbackしてtest1だけを活かすことはできます。

普通にロールバックすると3つのマイグレーションが全部戻される(downメソッドが実行される)わけですが、

--step=2みたいにstepのオプションを付与すると直近の2つだけロールバック、ができたりします。

root@6c523dcb4f04:/var/www# php artisan migrate:rollback --step=2
Rolling back: 2022_07_24_151524_test3
Rolled back: 2022_07_24_151524_test3 (11.98ms)
Rolling back: 2022_07_24_151435_test2
Rolled back: 2022_07_24_151435_test2 (0.64ms)

Laravel公式の解説だとこのページです。

https://laravel.com/docs/master/migrations#running-migrations

あまり実務で使ったことはありませんが、、、