Прекратить prePersist LifeCycleEvent быть рекурсивным в Doctrine2 Entiy

0

Я использую prePersist LifeCycleEvent для обновления Entity, обновляя этот Entity, создавая цикл, когда объект снова и снова перезаписывается в базу данных.

public function doSomething(LifecycleEventArgs $event)
{
     // Stuff here
     $em = $event->getEntityManager();
     $em->persist($entity);
     $em->flush();
}

Как я могу сам обновить Entity, не вызывая его рекурсивный цикл?

  • 0
    Ваш $entity - новый объект? Если это не так, он уже будет управляться доктриной, и нет причин снова сохранять его в диспетчере объектов.
Теги:
recursion
entity
doctrine2

1 ответ

1
Лучший ответ

Поскольку событие prePersist запускается до того, как объект фактически запланирован для вставки в единицу работы, вы можете просто изменить состояние объекта здесь без необходимости ручного вызова persist/flush.

Просто делайте свои вещи в своем обратном вызове и не беспокойтесь о менеджере сущностей.

  • 0
    Что, если я вместо этого использую preUpdate - то же самое все еще верно?
  • 0
    Ммм, я не совсем уверен в этом. Я бы сказал, да, но вам, возможно, придется изменить уже измененное значение через $event->setNewValue('name', 'foo'); (Но если вы не изменили имя сущности, тогда вы можете просто сделать $this->name = 'foo'; ).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню