РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
116 of 1392 menu

cascadeOnDelete

Метод cascadeOnDelete применяется к определению внешнего ключа в миграциях Laravel и позволяет автоматически удалять все связанные дочерние записи при удалении родительской записи. Метод вызывается после определения внешнего ключа с помощью метода constrained или foreign. При использовании cascadeOnDelete в базе данных создается ограничение внешнего ключа с опцией ON DELETE CASCADE, что гарантирует целостность данных на уровне базы данных.

Синтаксис

<?php Schema::table('table_name', function (Blueprint $table) { $table->foreignId('column_name') ->constrained('parent_table') ->cascadeOnDelete(); }); ?>

Пример

Давайте создадим миграцию для таблицы comments, в которой внешний ключ user_id будет каскадно удалять все комментарии пользователя при его удалении:

<?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('comments', function (Blueprint $table) { $table->id(); $table->foreignId('user_id') ->constrained('users') ->cascadeOnDelete(); $table->text('content'); $table->timestamps(); }); } public function down(): void { Schema::dropIfExists('comments'); } }; ?>

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

Пример

Метод cascadeOnDelete можно использовать в отдельной миграции для добавления каскадного удаления к уже существующему внешнему ключу:

<?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('comments', function (Blueprint $table) { $table->dropForeign(['user_id']); $table->foreign('user_id') ->references('id') ->on('users') ->cascadeOnDelete(); }); } public function down(): void { Schema::table('comments', function (Blueprint $table) { $table->dropForeign(['user_id']); $table->foreign('user_id') ->references('id') ->on('users'); }); } }; ?>

В этом примере мы сначала удаляем существующий внешний ключ, а затем создаем его заново с опцией каскадного удаления.

Пример

Давайте создадим миграцию с несколькими внешними ключами, использующими каскадное удаление:

<?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('orders', function (Blueprint $table) { $table->id(); $table->foreignId('user_id') ->constrained('users') ->cascadeOnDelete(); $table->foreignId('product_id') ->constrained('products') ->cascadeOnDelete(); $table->integer('quantity'); $table->timestamps(); }); } public function down(): void { Schema::dropIfExists('orders'); } }; ?>

Теперь при удалении пользователя или товара все связанные заказы будут автоматически удалены.

Смотрите также

  • метод foreign,
    который определяет внешний ключ в таблице
  • метод constrained,
    который добавляет ограничение внешнего ключа
  • метод nullOnDelete,
    который устанавливает NULL при удалении родительской записи
  • метод dropForeign,
    который удаляет внешний ключ
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить