Урок 10

Откат и пересоздание БД

Laravel предоставляет команды для управления состоянием БД.

migrate

Накатывает все новые миграции:

php artisan migrate

migrate:rollback

Откатывает последний батч:

php artisan migrate:rollback
php artisan migrate:rollback --step=3

--step=3 откатывает 3 последние миграции, независимо от батча.

migrate:reset

Откатывает все миграции:

php artisan migrate:reset

migrate:refresh

Откатывает и накатывает заново:

php artisan migrate:refresh
php artisan migrate:refresh --seed

migrate:fresh

Сносит все таблицы и накатывает заново, не используя down:

php artisan migrate:fresh
php artisan migrate:fresh --seed

Быстрее, чем refresh, потому что не выполняет down-миграции.

migrate:status

Показывает статус:

php artisan migrate:status

Вывод:

Migration name .................... Batch / Status
2026_01_01_create_users_table .... [1] Ran
2026_01_02_create_posts_table .... [1] Ran
2026_01_03_add_status_to_posts ... [2] Ran

migrate --pretend

Показывает SQL, который будет выполнен, без реального запуска:

php artisan migrate --pretend

migrate --force

В продакшене миграции требуют подтверждения. --force обходит его:

php artisan migrate --force

Советы

  • Никогда не редактируй уже накатанную миграцию на продакшене
  • Всегда пиши down, даже если не собираешься откатывать
  • Тестируй миграции на локальной БД перед деплоем
  • Не используй migrate:fresh на продакшене — потеряешь данные