たとえば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
あまり実務で使ったことはありませんが、、、