Метод down
Метод down класса Migration предназначен для отката изменений, которые были внесены в базу данных методом up. Этот метод вызывается при выполнении команды php artisan migrate:rollback или php artisan migrate:reset. Внутри метода down необходимо описать действия, обратные тем, что были выполнены в up - как правило, это удаление таблиц или колонок, либо изменение их структуры.
Синтаксис
<?php
Schema::dropIfExists('table_name');
?>
<?php
Schema::table('table_name', function (Blueprint $table) {
$table->dropColumn('column_name');
});
?>
Пример
Рассмотрим простую миграцию для создания таблицы articles с полями title и body. В методе down мы удалим эту таблицу.
<?php
use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;
return new class extends Migration
{
public function up(): void
{
Schema::create('articles', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('body');
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('articles');
}
};
?>
Пример
Если нужно откатить только добавление новой колонки, в методе down используем метод dropColumn.
<?php
use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;
return new class extends Migration
{
public function up(): void
{
Schema::table('articles', function (Blueprint $table) {
$table->foreignId('category_id')->constrained();
});
}
public function down(): void
{
Schema::table('articles', function (Blueprint $table) {
$table->dropForeign(['category_id']);
$table->dropColumn('category_id');
});
}
};
?>
Пример
При откате изменения типа колонки необходимо вернуть исходный тип.
<?php
use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;
return new class extends Migration
{
public function up(): void
{
Schema::table('articles', function (Blueprint $table) {
$table->string('body', 1000)->change();
});
}
public function down(): void
{
Schema::table('articles', function (Blueprint $table) {
$table->text('body')->change();
});
}
};
?>
Пример
При удалении таблицы с внешними ключами важно правильно соблюсти порядок отката, чтобы избежать ошибок.
<?php
use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;
return new class extends Migration
{
public function up(): void
{
Schema::create('comments', function (Blueprint $table) {
$table->id();
$table->foreignId('article_id')->constrained()->cascadeOnDelete();
$table->text('content');
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('comments');
}
};
?>
Смотрите также
-
метод
up,
который выполняет изменения в базе данных -
класс
Schema,
предоставляющий методы для работы со схемой базы данных -
метод
dropIfExists,
который удаляет таблицу, если она существует -
метод
dropColumn,
который удаляет указанную колонку из таблицы