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

Метод constrained

Метод constrained используется в миграциях для создания внешнего ключа с автоматическим определением целевой таблицы и столбца. Метод применяется к определению поля foreignId и упрощает создание внешних ключей. Он автоматически определяет таблицу и столбец, на которые ссылается внешний ключ, на основе названия поля. Если поле называется 'user_id', метод будет ссылаться на таблицу 'users' и столбец 'id'. Также метод позволяет настроить действия при удалении с использованием дополнительных методов.

Синтаксис

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

Пример автоматического создания внешнего ключа

Давайте создадим внешний ключ в таблице 'posts', который ссылается на таблицу '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('posts', function (Blueprint $table) { $table->id(); $table->string('title'); $table->text('content'); $table->foreignId('user_id')->constrained(); $table->timestamps(); }); } public function down(): void { Schema::dropIfExists('posts'); } }; ?>

Результат выполнения кода:

"Foreign key 'posts_user_id_foreign' created on table '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('comments', function (Blueprint $table) { $table->id(); $table->text('comment'); $table->foreignId('post_id')->constrained('posts', 'id'); $table->timestamps(); }); } public function down(): void { Schema::dropIfExists('comments'); } }; ?>

Результат выполнения кода:

"Foreign key 'comments_post_id_foreign' created on table 'comments'"

Пример с действиями при удалении

Давайте настроим каскадное удаление при удалении связанной записи:

<?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->text('comment'); $table->foreignId('post_id')->constrained()->cascadeOnDelete(); $table->timestamps(); }); } public function down(): void { Schema::dropIfExists('comments'); } }; ?>

Результат выполнения кода:

"Foreign key 'comments_post_id_foreign' created with cascade on delete"

Пример использования в существующей таблице

Давайте добавим внешний ключ в существующую таблицу:

<?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->foreignId('category_id')->nullable()->constrained(); }); } public function down(): void { Schema::table('posts', function (Blueprint $table) { $table->dropForeign(['category_id']); $table->dropColumn('category_id'); }); } }; ?>

Результат выполнения кода:

"Foreign key 'posts_category_id_foreign' added to table 'posts'"

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

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