Этот вопрос проверяет понимание системы управления версиями схемы базы данных (миграций) и знание основных операций, которые можно выполнять для ее изменения.
Миграции базы данных — это код, который описывает изменения в структуре БД (схеме). С их помощью можно версионировать и безопасно применять изменения. Основные операции включают создание и удаление таблиц, добавление, изменение и удаление столбцов, создание и удаление индексов и внешних ключей, а также выполнение произвольных SQL-запросов. Каждая миграция имеет методы up (для применения изменений) и down (для их отката).
Миграции позволяют управлять эволюцией схемы базы данных предсказуемо и контролируемо, как система контроля версий для вашего кода.
Работа с таблицами
Создание таблицы: Schema::create('table_name', function (Blueprint $table) { ... });
Удаление таблицы: Schema::drop('table_name'); или Schema::dropIfExists('table_name');
Переименование таблицы: Schema::rename($from, $to);
Работа со столбцами
Добавление столбца: $table->string('email');, $table->integer('user_id')->unsigned();
Изменение столбца: $table->string('name', 100)->change(); (требует установки пакета doctrine/dbal)
Переименование столбца: $table->renameColumn('from', 'to');
Удаление столбца: $table->dropColumn('column_name');
Работа с индексами
Добавление индекса:
Первичный ключ: $table->primary('id');
Уникальный индекс: $table->unique('email');
Простой индекс: $table->index('state');
Удаление индекса: $table->dropPrimary('...');, $table->dropUnique('...');, $table->dropIndex('...');
Работа с внешними ключами (Foreign Keys)
Создание: $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
Удаление: $table->dropForeign(['user_id']);
Выполнение произвольного SQL
Для операций, которые не поддерживаются построителем схем, можно использовать прямой SQL: DB::statement('ALTER TABLE users ...');
// В методе up()
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->id(); // Первичный ключ bigint, auto_increment
$table->string('title');
$table->text('content');
$table->foreignId('user_id')->constrained()->onDelete('cascade'); // Внешний ключ
$table->timestamps(); // Столбцы created_at и updated_at
// Создание индекса для столбца title
$table->index('title');
});
}
// В методе down() описывается откат миграции
public function down()
{
Schema::dropIfExists('posts');
}Вывод:
Миграции предоставляют мощный и безопасный способ синхронизировать схему базы данных между средами разработки, тестирования и продакшена. Они позволяют описывать сложные изменения структуры БД кодом, который можно применить или откатить одной командой, что является краеугольным камнем современных практик CI/CD.