Php 停止在Doctrine2实体中递归prePersist生命周期事件

Php 停止在Doctrine2实体中递归prePersist生命周期事件,php,symfony,recursion,doctrine-orm,entity,Php,Symfony,Recursion,Doctrine Orm,Entity,我正在使用prePersistLifeCycleEvent更新一个实体,当对象被一次又一次地重新保存到数据库时,更新该实体会创建一个循环 public function doSomething(LifecycleEventArgs $event) { // Stuff here $em = $event->getEntityManager(); $em->persist($entity); $em->flush(); } 如何让实体更新

我正在使用
prePersist
LifeCycleEvent更新一个实体,当对象被一次又一次地重新保存到数据库时,更新该实体会创建一个循环

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

如何让实体更新自身,而不导致其递归循环?

由于prePersist事件在实体实际计划插入工作单元之前触发,因此您可以在此处更改实体状态,而无需手动调用persist/flush


只需在回调中完成您的工作,而不用担心实体管理器。

您的
$entity
是一个新对象吗?如果不是,它将已经由条令管理,并且没有理由再次将其保存到对象管理器中。如果我改用preUpdate,会怎么样?还是一样吗?嗯,我不太确定这一点。我会说是的,但您可能必须通过
$event->setNewValue('name','foo')更改已经更改的值(但是如果您没有更改实体的名称,那么您可以只执行
$this->name='foo';
)。