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

Событие PostPersist

Событие PostPersist относится к жизненному циклу сущности и вызывается после того, как новая запись была вставлена в базу данных. Оно срабатывает через метод-слушатель, отмеченный атрибутом PostPersist. В отличие от PrePersist, здесь сущность уже имеет сгенерированный идентификатор. Изменения, внесённые в сущность внутри этого события, не попадут в текущий INSERT автоматически и потребуют отдельного flush.

Синтаксис

#[PostPersist] public function methodName(): void

Пример

Давайте создадим сущность Article и повесим на метод слушатель события PostPersist, который выводит идентификатор сохранённой записи:

<?php namespace AppEntity; use DoctrineORMMapping as ORM; use DoctrineORMMappingHasLifecycleCallbacks; #[ORMEntity] #[ORMTable(name: 'articles')] #[HasLifecycleCallbacks] class Article { #[ORMId] #[ORMGeneratedValue] #[ORMColumn(type: 'integer')] private ?int $id = null; #[ORMColumn(type: 'string', length: 255)] private string $title; #[ORMColumn(type: 'datetime')] private DateTimeInterface $createdAt; #[ORMPostPersist] public function onPostPersist(): void { echo 'Saved article with id ' . $this->id; } public function setTitle(string $title): self { $this->title = $title; return $this; } public function setCreatedAt(DateTimeInterface $createdAt): self { $this->createdAt = $createdAt; 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('article'); $article->setCreatedAt(new DateTime()); $em->persist($article); $em->flush(); return new Response('ok'); } } ?>

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

Saved article with id 1

Пример

Давайте в событии PostPersist запишем данные в отдельную сущность лога. Так как сущность уже сохранена, мы можем использовать её идентификатор:

<?php namespace AppEntity; use DoctrineORMMapping as ORM; use DoctrineORMMappingHasLifecycleCallbacks; #[ORMEntity] #[ORMTable(name: 'articles')] #[HasLifecycleCallbacks] class Article { #[ORMId] #[ORMGeneratedValue] #[ORMColumn(type: 'integer')] private ?int $id = null; #[ORMColumn(type: 'string', length: 255)] private string $title; #[ORMColumn(type: 'text', nullable: true)] private ?string $log = null; #[ORMPostPersist] public function onPostPersist(): void { $this->log = 'Article ' . $this->id . ' was created'; } public function setTitle(string $title): self { $this->title = $title; return $this; } public function getLog(): ?string { return $this->log; } } ?>

После сохранения в свойстве log окажется строка:

"Article 1 was created"

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

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