Кожен запуск php artisan migrate записує виконані міграції в таблицю migrations з одним номером пакета (batch).
php artisan migrate:rollback # відкотити останній пакет цілком
php artisan migrate:rollback --step=1 # рівно одну останню міграцію
php artisan migrate:rollback --batch=3 # конкретний пакет
php artisan migrate:status # що виконано і в якому пакеті
Відкат викликає down(), тож вона має справді повертати попередній стан: видалити створену колонку, відновити змінений тип.
Інші команди - і чим вони небезпечні:
migrate:reset- відкотити все;migrate:refresh- відкотити все й виконати знову (проходить усіdown());migrate:fresh- видалити всі таблиці й виконати міграції з нуля,down()не викликається.
Останні три знищують дані - на продакшені їх не запускають, а локально з копією прод-бази - теж обережно.
На продакшені відкат міграції, яка видалила колонку з даними, не поверне дані. Тому руйнівні зміни роблять окремим релізом пізніше, а відкат релізу - новою міграцією вперед, а не rollback.