Я использую prePersist
LifeCycleEvent для обновления Entity, обновляя этот Entity, создавая цикл, когда объект снова и снова перезаписывается в базу данных.
public function doSomething(LifecycleEventArgs $event)
{
// Stuff here
$em = $event->getEntityManager();
$em->persist($entity);
$em->flush();
}
Как я могу сам обновить Entity, не вызывая его рекурсивный цикл?
Поскольку событие prePersist запускается до того, как объект фактически запланирован для вставки в единицу работы, вы можете просто изменить состояние объекта здесь без необходимости ручного вызова persist/flush.
Просто делайте свои вещи в своем обратном вызове и не беспокойтесь о менеджере сущностей.
$event->setNewValue('name', 'foo');
(Но если вы не изменили имя сущности, тогда вы можете просто сделать $this->name = 'foo';
).
$entity
- новый объект? Если это не так, он уже будет управляться доктриной, и нет причин снова сохранять его в диспетчере объектов.