2017-01-04 8 views
1

Я использую Doctrine ORM с symfony для моего последнего проекта. Мне нужно, чтобы моя доктрина использовала политику Отложенного Явного отслеживания по умолчанию - мне нужно контролировать, что и когда нужно сохранять.Как изменить политику отслеживания по умолчанию Doctrine ORM для Deferred Explicit

я могу изменить доктрину политики отслеживания для каждого объекта в его аннотации

/** 
* @ORM\ChangeTrackingPolicy("DEFERRED_EXPLICIT") 
*/ 

, но я хотел бы сделать эту политику отслеживания по умолчанию для всех объектов. Из-за этого я не хочу создавать общий родительский объект. Есть ли способ установить эту политику отслеживания для целого проекта? ОКТЯБРЬ tracking policies.

Баки для своего времени

ответ

0

Мое текущее решение является лишь немного больше раздражает, чем изменение политики отслеживания проектов широк - я должен всегда передать все мои измененные объекты в EntityManager->flush($entity=null). Другими словами - я должен предотвратить вызов метода flush без параметров.

1

Событие Doctrine\ORM\Events::loadClassMetadata, в которое вы можете подключиться и создать прослушиватель, который перезаписывает политику в метаданных объекта.

Слушатель вызывается после того, как метаданные загружаются из аннотаций/yml/xml, прежде чем они будут сохранены в кеше, поэтому он должен быть очень эффективным.

+0

Это означает, что вы будете менять политику отслеживания сущностей для каждого класса на лету (но не для каждого экземпляра). Это приемлемое решение, я дам ему несколько дней, если кто-то найдет что-то более очевидное (например, настройки доктрины). В любом случае, спасибо. Díky Filipe :) –

 Смежные вопросы

  • Нет связанных вопросов^_^