Поле foreignUlid
Метод foreignUlid используется для создания внешнего ключа, который ссылается на поле типа ULID в другой таблице. По умолчанию он создаёт столбец с именем, образованным от названия связанной таблицы и суффикса _ulid. Первым параметром передаётся имя целевой таблицы, вторым - имя столбца (опционально). Если второй параметр не указан, Laravel автоматически генерирует имя столбца.
Синтаксис
<?php
Schema::table('table_name', function (Blueprint $table) {
$table->foreignUlid($tableName, $column);
});
?>
Пример использования
Создадим таблицу posts с внешним ключом user_ulid, ссылающимся на таблицу 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('body');
$table->foreignUlid('users', 'user_ulid')
->constrained()
->cascadeOnDelete();
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('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('content');
$table->foreignUlid('posts')
->constrained()
->nullOnDelete();
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('comments');
}
};
?>
Использование в модели
Пример модели, где для внешнего ключа используется тип данных string, но можно использовать и трейт для работы с ULID:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
protected $fillable = ['title', 'body', 'user_ulid'];
public function user()
{
return $this->belongsTo(User::class, 'user_ulid', 'ulid');
}
}
?>
Результат выполнения запроса на получение постов с пользователями:
["Post 1 (User: John)", "Post 2 (User: Jane)"]
Смотрите также
-
метод
foreignUuid,
который создаёт внешний ключ на основе UUID -
метод
foreignId,
который создаёт внешний ключ на основе целого числа -
метод
ulid,
который создаёт обычное поле типа ULID -
метод
constrained,
который добавляет ограничение внешнего ключа