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

Поле foreignId

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

Синтаксис

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

Пример

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

В результате будет создана таблица со следующими полями:

"id (bigint unsigned)" "user_id (bigint unsigned)" "title (varchar)" "content (text)" "created_at (timestamp)" "updated_at (timestamp)"

Пример

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

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

Пример

Чтобы автоматически удалять связанные записи при удалении родительской, используется метод cascadeOnDelete. Давайте создадим таблицу 'profiles' с каскадным удалением:

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

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

Пример

Метод foreignId можно комбинировать с другими методами для создания более сложных ограничений. Например, указать конкретную таблицу и колонку для связи:

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

В этом примере мы явно указываем, что поле 'customer_id' ссылается на таблицу 'users' и колонку 'id', а поле 'product_id' - на таблицу 'products' и колонку 'id'.

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

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