Поле Ulid
Поле Ulid создаёт колонку для хранения
уникальных идентификаторов в формате ULID.
ULID - это 128-битный идентификатор, состоящий
из 48-битной метки времени и 80 бит случайности.
В отличие от UUID, ULID лексикографически
сортируем, что удобно для баз данных. Первым
параметром передаётся имя поля. Поле автоматически
генерирует значение при создании сущности.
Синтаксис
#[ORM\Column(type: 'ulid')]
private ?Ulid $fieldName = null;
Пример
Давайте создадим сущность с полем Ulid:
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Uid\Ulid;
#[ORM\Entity]
class Article
{
#[ORM\Id]
#[ORM\Column(type: 'ulid', unique: true)]
private ?Ulid $id = null;
#[ORM\Column(type: 'string', length: 255)]
private string $title = '';
public function getId(): ?Ulid
{
return $this->id;
}
public function getTitle(): string
{
return $this->title;
}
public function setTitle(string $title): self
{
$this->title = $title;
return $this;
}
}
?>
Пример
Давайте создадим и сохраним сущность через
EntityManager:
<?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((string) $article->getId());
}
}
?>
Результат выполнения кода:
"01HZX9K2Y8V3Q4R5S6T7U8V9W0"
Пример
Давайте найдём сущность по ULID:
<?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\Ulid;
class ArticleController extends AbstractController
{
#[Route('/article/{id}', name: 'article_show')]
public function show(string $id, EntityManagerInterface $em): Response
{
$article = $em->getRepository(Article::class)
->find(Ulid::fromString($id));
if (!$article) {
return new Response('article not found', 404);
}
return new Response($article->getTitle());
}
}
?>
Результат выполнения кода для адреса /article/01HZX9K2Y8V3Q4R5S6T7U8V9W0:
"hello"