Класс HasUuids
Класс HasUuids представляет собой трейт, который добавляет модели
возможность автоматически генерировать UUID (Universally Unique Identifier)
при создании новой записи. Трейт переопределяет метод bootHasUuids,
который подписывается на событие creating модели и присваивает полю
uuid уникальное значение. При использовании данного трейта
необходимо, чтобы в таблице базы данных было поле типа uuid.
Синтаксис
<?php
namespace AppModels;
use IlluminateDatabaseEloquentModel;
use IlluminateDatabaseEloquentConcernsHasUuids;
class Article extends Model
{
use HasUuids;
}
?>
Пример
Давайте создадим модель Article с использованием трейта HasUuids
и добавим новую запись в базу данных:
<?php
namespace AppModels;
use IlluminateDatabaseEloquentModel;
use IlluminateDatabaseEloquentConcernsHasUuids;
class Article extends Model
{
use HasUuids;
protected $fillable = ['title', 'content'];
}
?>
<?php
use AppModelsArticle;
$article = new Article();
$article->title = 'article';
$article->content = 'Lorem ipsum dolor sit amet';
$article->save();
echo $article->id;
?>
Результат выполнения кода:
"550e8400-e29b-41d4-a716-446655440000"
Пример
Трейт HasUuids позволяет переопределить поле, используемое
для хранения UUID. По умолчанию это поле id. Давайте укажем,
что UUID будет храниться в поле uuid:
<?php
namespace AppModels;
use IlluminateDatabaseEloquentModel;
use IlluminateDatabaseEloquentConcernsHasUuids;
class User extends Model
{
use HasUuids;
protected $fillable = ['name', 'email'];
public function uniqueIds()
{
return ['uuid'];
}
}
?>
<?php
use AppModelsUser;
$user = new User();
$user->name = 'John Doe';
$user->email = 'john@example.com';
$user->save();
echo $user->uuid;
?>
Результат выполнения кода:
"f47ac10b-58cc-4372-a567-0e02b2c3d479"
Пример
При поиске записей по UUID можно использовать метод whereUuid,
который автоматически добавляется трейтом. Давайте найдём статью по её UUID:
<?php
use AppModelsArticle;
$uuid = '550e8400-e29b-41d4-a716-446655440000';
$article = Article::whereUuid($uuid)->first();
echo $article ? $article->title : 'Article not found';
?>
Результат выполнения кода:
"article"
Пример
Трейт также добавляет метод whereUuidIn для поиска записей
по нескольким UUID. Давайте найдём пользователей по списку UUID:
<?php
use AppModelsUser;
$uuids = [
'f47ac10b-58cc-4372-a567-0e02b2c3d479',
'f47ac10b-58cc-4372-a567-0e02b2c3d480'
];
$users = User::whereUuidIn($uuids)->get();
foreach ($users as $user) {
echo $user->name . PHP_EOL;
}
?>
Результат выполнения кода:
"John Doe"
"Jane Smith"
Смотрите также
-
класс
SoftDeletes,
который добавляет мягкое удаление записей -
метод
uuid,
который создаёт поле для хранения UUID -
метод
foreignUuid,
который создаёт внешний ключ для UUID -
метод
save,
который сохраняет модель в базу данных