Метод dropForeign
Метод dropForeign класса Blueprint применяется в миграциях
для удаления существующего ограничения внешнего ключа из таблицы.
В качестве параметра метод принимает имя удаляемого ограничения
или массив колонок, по которым был создан внешний ключ.
Если передаётся массив колонок, Laravel автоматически сгенерирует
имя ограничения по стандартному шаблону.
Синтаксис
<?php
// Удаление по имени ограничения
Schema::table('table_name', function (Blueprint $table) {
$table->dropForeign('fk_name');
});
// Удаление по массиву колонок
Schema::table('table_name', function (Blueprint $table) {
$table->dropForeign(['column_name']);
});
?>
Пример
Давайте создадим миграцию для добавления внешнего ключа
к таблице 'posts', а затем удалим его:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('body');
$table->foreignId('user_id')
->constrained()
->onDelete('cascade');
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('posts');
}
};
?>
Теперь напишем миграцию для удаления внешнего ключа
с именем 'posts_user_id_foreign':
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::table('posts', function (Blueprint $table) {
$table->dropForeign('posts_user_id_foreign');
});
}
public function down(): void
{
Schema::table('posts', function (Blueprint $table) {
$table->foreignId('user_id')
->constrained()
->onDelete('cascade');
});
}
};
?>
Пример
Если вы не знаете точное имя ограничения, можно передать массив колонок, и Laravel автоматически определит имя внешнего ключа:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::table('posts', function (Blueprint $table) {
$table->dropForeign(['user_id']);
});
}
public function down(): void
{
Schema::table('posts', function (Blueprint $table) {
$table->foreignId('user_id')
->constrained()
->onDelete('cascade');
});
}
};
?>
Пример
Удаление составного внешнего ключа по массиву колонок:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::table('order_items', function (Blueprint $table) {
$table->dropForeign(['order_id', 'product_id']);
});
}
public function down(): void
{
Schema::table('order_items', function (Blueprint $table) {
$table->foreign(['order_id', 'product_id'])
->references(['id', 'id'])
->on('order_product')
->onDelete('cascade');
});
}
};
?>
Смотрите также
-
метод
foreign,
который добавляет внешний ключ к таблице -
метод
index,
который создаёт индекс для колонок -
метод
disableForeignKeyConstraints,
который временно отключает проверку внешних ключей -
метод
table,
который используется для изменения существующей таблицы