РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
110 of 258 menu

Атрибут GeneratedValue

Атрибут GeneratedValue вешается на свойство сущности, которое помечено атрибутом Id. Он сообщает Doctrine, что значение этого поля не нужно задавать вручную - оно будет сгенерировано автоматически при сохранении сущности. Первым параметром передаётся стратегия генерации: AUTO, IDENTITY, SEQUENCE, UUID или CUSTOM.

Стратегия AUTO позволяет Doctrine самостоятельно выбрать способ генерации в зависимости от драйвера базы данных. Стратегия IDENTITY полагается на автоинкремент самой СУБД. Стратегия SEQUENCE использует отдельную последовательность, а UUID генерирует уникальный идентификатор на стороне PHP.

Синтаксис

#[GeneratedValue(strategy: strategy)]

Пример

Давайте создадим сущность Article с автоинкрементным идентификатором:

<?php namespace AppEntity; use DoctrineORMMapping as ORM; #[ORMEntity] class Article { #[ORMId] #[ORMGeneratedValue(strategy: 'IDENTITY')] #[ORMColumn(type: 'integer')] private ?int $id = null; #[ORMColumn(type: 'string', length: 255)] private string $title; public function getId(): ?int { return $this->id; } public function getTitle(): string { return $this->title; } public function setTitle(string $title): self { $this->title = $title; return $this; } } ?>

Теперь сохраним новую статью через EntityManager:

<?php namespace AppController; use AppEntityArticle; use DoctrineORMEntityManagerInterface; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; class ArticleController extends AbstractController { public function create(EntityManagerInterface $em): Response { $article = new Article(); $article->setTitle('abcde'); $em->persist($article); $em->flush(); return new Response((string) $article->getId()); } } ?>

Результат выполнения кода:

"1"

Пример

Давайте используем стратегию UUID для генерации идентификатора:

<?php namespace AppEntity; use DoctrineORMMapping as ORM; use SymfonyBridgeDoctrineAttributeUuid; #[ORMEntity] class Article { #[ORMId] #[ORMGeneratedValue(strategy: 'UUID')] #[ORMColumn(type: 'uuid', unique: true)] private ?string $id = null; #[ORMColumn(type: 'text')] private string $body; public function getId(): ?string { return $this->id; } public function getBody(): string { return $this->body; } public function setBody(string $body): self { $this->body = $body; return $this; } } ?>

После сохранения сущности поле id получит сгенерированное значение UUID:

<?php namespace AppController; use AppEntityArticle; use DoctrineORMEntityManagerInterface; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; class ArticleController extends AbstractController { public function create(EntityManagerInterface $em): Response { $article = new Article(); $article->setBody('abcde'); $em->persist($article); $em->flush(); return new Response($article->getId()); } } ?>

Результат выполнения кода:

"550e8400-e29b-41d4-a716-446655440000"

Пример

Давайте применим стратегию SEQUENCE совместно с атрибутом SequenceGenerator:

<?php namespace AppEntity; use DoctrineORMMapping as ORM; #[ORMEntity] class Article { #[ORMId] #[ORMGeneratedValue(strategy: 'SEQUENCE')] #[ORMSequenceGenerator(sequenceName: 'article_seq', allocationSize: 100)] #[ORMColumn(type: 'integer')] private ?int $id = null; #[ORMColumn(type: 'boolean')] private bool $published = false; public function getId(): ?int { return $this->id; } public function isPublished(): bool { return $this->published; } public function setPublished(bool $published): self { $this->published = $published; return $this; } } ?>

При сохранении значение id будет взято из последовательности article_seq:

<?php namespace AppController; use AppEntityArticle; use DoctrineORMEntityManagerInterface; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; class ArticleController extends AbstractController { public function create(EntityManagerInterface $em): Response { $article = new Article(); $article->setPublished(true); $em->persist($article); $em->flush(); return new Response((string) $article->getId()); } } ?>

Результат выполнения кода:

"1"

Смотрите также

  • атрибут Id,
    который помечает поле первичного ключа
  • атрибут SequenceGenerator,
    который задаёт параметры последовательности
  • атрибут Entity,
    который помечает класс как сущность Doctrine
  • атрибут Column,
    который описывает колонку таблицы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить