【问题标题】:Stop prePersist LifeCycleEvent being recursive in Doctrine2 Entiy停止 prePersist LifeCycleEvent 在 Doctrine2 实体中递归
【发布时间】:2015-02-09 23:45:33
【问题描述】:

我正在使用prePersist LifeCycleEvent 更新实体,更新此实体会创建一个循环,因为对象会一遍又一遍地重新保存到数据库中。

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

我怎样才能让实体自己更新,而不引起他的递归循环?

【问题讨论】:

  • 你的$entity是一个新对象吗?如果不是,则它已经由学说管理,没有理由再次将其持久化到对象管理器中。

标签: php symfony recursion doctrine-orm entity


【解决方案1】:

由于 prePersist 事件是在实体实际安排插入工作单元之前触发的,因此您只需在此处更改实体状态,而无需手动调用持久/刷新。

只需在回调中做你的事情,不要打扰实体管理器。

【讨论】:

  • 如果我改用 preUpdate 会怎样 - 仍然如此吗?
  • 嗯,我不太确定这个。我会说是的,但是您可能必须通过 $event->setNewValue('name', 'foo'); 更改已更改的值(但如果您没有更改实体的名称,那么您可以只更改 $this->name = 'foo';)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多