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

Атрибут ChangeTrackingPolicy

Атрибут ChangeTrackingPolicy вешается на класс сущности и определяет, каким образом Doctrine будет отслеживать изменения полей объекта. Первым параметром передаётся имя стратегии, например 'DEFERRED_EXPLICIT'. По умолчанию используется стратегия 'DEFERRED_IMPLICIT'.

Синтаксис

#[ChangeTrackingPolicy(policy)]

Пример

Давайте создадим сущность с явным отслеживанием изменений:

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

Теперь при изменении поля title Doctrine не станет автоматически помечать сущность как изменённую. Для этого нужно явно вызвать метод notifyOfPropertyChange.

Пример

Давайте обновим поле сущности и явно уведомим Doctrine об изменении:

<?php namespace AppController; use AppEntityArticle; use DoctrineORMEntityManagerInterface; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/article/update', name: 'article_update')] public function update(EntityManagerInterface $em): Response { $article = new Article(); $article->setTitle('abcde'); $em->persist($article); $em->flush(); $em->getUnitOfWork()->notifyOfPropertyChange($article, 'title'); $article->setTitle('hello'); $em->flush(); return new Response($article->getTitle()); } } ?>

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

"hello"

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

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