Поле uuid
Поле uuid создаёт колонку для хранения
универсального уникального идентификатора (UUID).
Оно автоматически генерирует значение при создании
новой записи, если не передано другое. Поле
подходит для первичных ключей и внешних связей.
Синтаксис
#[ORM\Column(type: 'uuid', options: [])]
Пример
Давайте создадим сущность с полем uuid в качестве первичного ключа:
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Uid\Uuid;
#[ORM\Entity]
class Article
{
#[ORM\Id]
#[ORM\Column(type: 'uuid', unique: true)]
private Uuid $id;
#[ORM\Column(type: 'string', length: 255)]
private string $title;
public function __construct()
{
$this->id = Uuid::v4();
}
public function getId(): Uuid
{
return $this->id;
}
public function getTitle(): string
{
return $this->title;
}
public function setTitle(string $title): void
{
$this->title = $title;
}
}
?>
Теперь создадим и сохраним объект через контроллер:
<?php
namespace App\Controller;
use App\Entity\Article;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article/create', name: 'article_create')]
public function create(EntityManagerInterface $em): Response
{
$article = new Article();
$article->setTitle('hello');
$em->persist($article);
$em->flush();
return new Response('ID: ' . $article->getId()->toRfc4122());
}
}
?>
Результат выполнения кода:
"ID: 550e8400-e29b-41d4-a716-446655440000"
Пример
Давайте найдём запись по её UUID:
<?php
namespace App\Controller;
use App\Entity\Article;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Uid\Uuid;
class ArticleController extends AbstractController
{
#[Route('/article/show/{id}', name: 'article_show')]
public function show(string $id, EntityManagerInterface $em): Response
{
$article = $em->getRepository(Article::class)->find(Uuid::fromString($id));
if (!$article) {
return new Response('not found');
}
return new Response($article->getTitle());
}
}
?>
Результат выполнения кода для адреса с существующим ID:
"hello"