Атрибут 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-сущность