Атрибут 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,
который настраивает кеширование метаданных сущности