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

Атрибут SequenceGenerator

Атрибут SequenceGenerator вешается на свойство сущности, которое помечено атрибутом Id и GeneratedValue со стратегией SEQUENCE. Он задаёт имя последовательности, начальное значение и шаг приращения. Первым параметром передаётся имя последовательности, параметр allocationSize задаёт шаг, а initialValue - стартовое значение.

Синтаксис

#[SequenceGenerator(sequenceName: name, allocationSize: size, initialValue: value)]

Пример

Давайте создадим сущность Article с идентификатором, генерируемым через последовательность article_seq:

<?php namespace AppEntity; use DoctrineORMMapping as ORM; #[ORMEntity] #[ORMTable(name: 'articles')] class Article { #[ORMId] #[ORMGeneratedValue(strategy: 'SEQUENCE')] #[ORMSequenceGenerator(sequenceName: 'article_seq', allocationSize: 1, initialValue: 1)] #[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; } } ?>

Теперь сохраним несколько сущностей и посмотрим, какие значения получит идентификатор:

<?php $article1 = new Article(); $article1->setTitle('article 1'); $entityManager->persist($article1); $entityManager->flush(); $article2 = new Article(); $article2->setTitle('article 2'); $entityManager->persist($article2); $entityManager->flush(); $res = [$article1->getId(), $article2->getId()]; print_r($res); ?>

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

[1, 2]

Пример

Давайте изменим шаг приращения на 10 и стартовое значение на 100:

<?php namespace AppEntity; use DoctrineORMMapping as ORM; #[ORMEntity] #[ORMTable(name: 'articles')] class Article { #[ORMId] #[ORMGeneratedValue(strategy: 'SEQUENCE')] #[ORMSequenceGenerator(sequenceName: 'article_seq_custom', allocationSize: 10, initialValue: 100)] #[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; } } ?>

Теперь сохраним три сущности и посмотрим на идентификаторы:

<?php $article1 = new Article(); $article1->setTitle('article 1'); $entityManager->persist($article1); $entityManager->flush(); $article2 = new Article(); $article2->setTitle('article 2'); $entityManager->persist($article2); $entityManager->flush(); $article3 = new Article(); $article3->setTitle('article 3'); $entityManager->persist($article3); $entityManager->flush(); $res = [$article1->getId(), $article2->getId(), $article3->getId()]; print_r($res); ?>

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

[100, 110, 120]

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

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