Uuidable
Додає сутності UUID версії 4, що генерується при першому збереженні.
Сутність
use Doctrine\ORM\Mapping as ORM;
use Ufo\DoctrineBehaviors\Contract\Entity\UuidableInterface;
use Ufo\DoctrineBehaviors\Model\Uuidable\UuidableTrait;
#[ORM\Entity]
class BlogPost implements UuidableInterface
{
use UuidableTrait;
#[ORM\Id, ORM\GeneratedValue, ORM\Column]
private ?int $id = null;
}
Як це працює
- Бандл мапить
uuidяк рядкову nullable-колонку. Це додаткове поле, а не первинний ключ — ідентифікатор сутності лишається вашим. - На
prePersistвикликаєтьсяgenerateUuid(): якщо UUID ще немає, створюєтьсяRamsey\Uuid\Uuid::uuid4(). Заданий вручну черезsetUuid()не перезаписується. getUuid()повертаєRamsey\Uuid\UuidInterface, навіть якщо з бази прийшов рядок.
$post = new BlogPost();
$entityManager->persist($post);
$entityManager->flush();
$post->getUuid()->toString(); // напр. '1ee9aa1b-6510-4105-92b9-7171bb2f3089'