🧱 Суть

Миграции позволяют изменять структуру базы данных, а Laravel хранит историю их выполнения и умеет откатывать изменения.

📦 Проблема

1. Непонятно, что откатывает rollback

php artisan migrate:rollback

Кажется, что команда отменяет только последнюю миграцию.

2. Непонятно, что такое Blueprint

Schema::table('users', function (Blueprint $table) {
    //
});

Неочевидно, зачем нужен объект $table.

✅ Решение

Понимать две основные сущности:

  • rollback работает с историей миграций
  • Blueprint описывает изменения таблицы

💻 Код

Rollback

Laravel хранит информацию о выполненных миграциях в таблице:

migrations

Пример:

idmigrationbatch
1create_users_table1
2add_avatar_to_users2
3rename_name_to_username3

Batch

batch – группа миграций, выполненных за один запуск:

php artisan migrate

Откат последнего batch

php artisan migrate:rollback

Laravel:

  • находит последний batch
  • вызывает down() у всех миграций из этой группы

Откат нескольких batch

php artisan migrate:rollback --step=3

Blueprint

Blueprint описывает изменения структуры таблицы.

Например:

$table->string('email');$table->integer('age');

Laravel преобразует это в SQL:

ALTER TABLE users ADD email VARCHAR(255);ALTER TABLE users ADD age INT;

Можно воспринимать Blueprint как конструктор SQL-запросов.

🎯 Вывод

  • rollback откатывает последний batch, а не одну миграцию
  • Laravel хранит историю миграций в таблице migrations
  • Blueprint описывает изменения таблицы
  • Laravel автоматически превращает методы Blueprint в SQL

🔗 Связано