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

Метод foreignIdFor

Метод foreignIdFor применяется в миграциях Laravel для создания поля внешнего ключа. Он принимает модель, с которой устанавливается связь, и автоматически определяет правильное имя колонки и тип данных. По умолчанию создаётся колонка с именем, состоящим из имени модели в нижнем регистре и суффикса _id.

Синтаксис

<?php Schema::create('posts', function (Blueprint $table) { $table->foreignIdFor(User::class); }); ?>

Пример

Создадим таблицу posts с внешним ключом на таблицу users:

<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; use App\Models\User; return new class extends Migration { public function up(): void { Schema::create('posts', function (Blueprint $table) { $table->id(); $table->foreignIdFor(User::class); $table->string('title'); $table->text('content'); $table->timestamps(); }); } public function down(): void { Schema::dropIfExists('posts'); } }; ?>

В результате будет создана таблица с полем user_id типа BIGINT.

Пример

Укажем кастомное имя колонки для внешнего ключа:

<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; use App\Models\User; return new class extends Migration { public function up(): void { Schema::create('comments', function (Blueprint $table) { $table->id(); $table->foreignIdFor(User::class, 'author_id'); $table->text('body'); $table->timestamps(); }); } public function down(): void { Schema::dropIfExists('comments'); } }; ?>

Теперь поле внешнего ключа получит имя author_id.

Пример

Добавим ограничение внешнего ключа с каскадным удалением:

<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; use App\Models\User; return new class extends Migration { public function up(): void { Schema::create('orders', function (Blueprint $table) { $table->id(); $table->foreignIdFor(User::class) ->constrained() ->onDelete('cascade'); $table->integer('amount'); $table->timestamps(); }); } public function down(): void { Schema::dropIfExists('orders'); } }; ?>

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

Пример

Создадим поле внешнего ключа, которое может быть пустым:

<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; use App\Models\User; return new class extends Migration { public function up(): void { Schema::create('products', function (Blueprint $table) { $table->id(); $table->foreignIdFor(User::class) ->nullable() ->constrained() ->nullOnDelete(); $table->string('name'); $table->timestamps(); }); } public function down(): void { Schema::dropIfExists('products'); } }; ?>

Теперь поле user_id может содержать значение NULL, а при удалении пользователя значение в этом поле станет NULL.

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

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