Поле foreignUuid
Метод foreignUuid применяется в миграциях Laravel
для создания поля внешнего ключа, которое ссылается
на UUID-поле связанной таблицы. Первым параметром
передаётся имя создаваемого поля, вторым - имя
связанной таблицы. По умолчанию метод создаёт
поле типа uuid и устанавливает внешний ключ
на поле id связанной таблицы.
Синтаксис
<?php
Schema::table('table_name', function (Blueprint $table) {
$table->foreignUuid('column_name', 'related_table');
});
?>
Пример с указанием связанной таблицы
Давайте создадим поле 'user_id', которое будет
внешним ключом, ссылающимся на UUID-поле 'id'
в таблице 'users':
<?php
use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;
return new class extends Migration
{
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->uuid('id')->primary();
$table->string('title');
$table->text('content');
$table->foreignUuid('user_id', 'users')->constrained();
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('posts');
}
};
?>
Результат выполнения кода:
"Table 'posts' created successfully with foreign key 'user_id'"
Пример без указания связанной таблицы
Метод foreignUuid может принимать только имя поля.
В этом случае Laravel автоматически определит связанную
таблицу по имени поля:
<?php
use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;
return new class extends Migration
{
public function up()
{
Schema::create('comments', function (Blueprint $table) {
$table->uuid('id')->primary();
$table->text('text');
$table->foreignUuid('post_id')->constrained();
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('comments');
}
};
?>
В этом примере Laravel автоматически свяжет поле
'post_id' с таблицей 'posts':
"Table 'comments' created with automatic foreign key detection"
Пример с дополнительными методами
Метод foreignUuid можно комбинировать с другими
методами для настройки поведения внешнего ключа:
<?php
use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;
return new class extends Migration
{
public function up()
{
Schema::create('orders', function (Blueprint $table) {
$table->uuid('id')->primary();
$table->decimal('total', 10, 2);
$table->foreignUuid('user_id', 'users')
->constrained()
->cascadeOnDelete()
->cascadeOnUpdate();
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('orders');
}
};
?>
Результат выполнения кода:
"Table 'orders' created with cascade delete and update rules"
Смотрите также
-
метод
foreignId,
который создаёт внешний ключ для целочисленного поля -
метод
uuid,
который создаёт поле для хранения UUID -
метод
foreign,
который создаёт внешний ключ для произвольного поля -
метод
constrained,
который устанавливает ограничение внешнего ключа