Поле uuid
Метод uuid используется в миграциях Laravel для создания колонки типа UUID (Universally Unique Identifier). UUID представляет собой 128-битный идентификатор, который гарантирует уникальность в пределах всей системы. В базах данных UUID обычно хранится как строка из 36 символов в формате 8-4-4-4-12. В отличие от автоинкрементных идентификаторов, UUID позволяет генерировать уникальные значения на уровне приложения без обращения к базе данных.
Синтаксис
<?php
Schema::table('table_name', function (Blueprint $table) {
$table->uuid($column_name);
});
?>
Пример
Давайте создадим миграцию для таблицы статей, где в качестве первичного ключа будет использоваться UUID:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up()
{
Schema::create('articles', function (Blueprint $table) {
$table->uuid('id')->primary();
$table->string('title');
$table->text('content');
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('articles');
}
};
?>
Пример
Создадим модель и будем автоматически генерировать UUID при создании новой записи:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Str;
class Article extends Model
{
protected $keyType = 'string';
public $incrementing = false;
protected static function boot()
{
parent::boot();
static::creating(function ($model) {
if (empty($model->id)) {
$model->id = Str::uuid()->toString();
}
});
}
}
?>
Пример
Используем встроенный трейт HasUuids для автоматической генерации UUID в модели:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Concerns\HasUuids;
class Article extends Model
{
use HasUuids;
public $incrementing = false;
protected $keyType = 'string';
}
?>
Теперь при создании новой записи UUID будет генерироваться автоматически:
<?php
namespace App\Http\Controllers;
use App\Models\Article;
class ArticleController extends Controller
{
public function store()
{
$article = new Article();
$article->title = 'article 1';
$article->content = 'content 1';
$article->save();
echo $article->id;
}
}
?>
Результат выполнения кода:
"550e8400-e29b-41d4-a716-446655440000"
Пример
Создадим внешний ключ, ссылающийся на UUID колонку в другой таблице:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up()
{
Schema::create('comments', function (Blueprint $table) {
$table->id();
$table->uuid('article_id');
$table->text('content');
$table->timestamps();
$table->foreign('article_id')
->references('id')
->on('articles')
->onDelete('cascade');
});
}
public function down()
{
Schema::dropIfExists('comments');
}
};
?>
Пример
Используем метод foreignUuid для создания внешнего ключа на UUID колонку:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up()
{
Schema::create('comments', function (Blueprint $table) {
$table->id();
$table->foreignUuid('article_id')
->constrained('articles')
->onDelete('cascade');
$table->text('content');
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('comments');
}
};
?>
Смотрите также
-
метод
foreignUuid,
который создает внешний ключ для UUID колонки -
класс
HasUuids,
который добавляет автоматическую генерацию UUID в модель -
метод
id,
который создает автоинкрементный первичный ключ -
метод
ulid,
который создает колонку с ULID идентификатором