我为给定的实体Foo
创建了一个实体监听器,它监听preFlush
事件。每当更新或创建Bar
实体时,我都想创建一个新的Foo
实体。
我的问题是computeChangeSets()
再次触发了preFlush事件,导致无限循环。任何人都有解决方案或替代方法来处理这个用例?
class SomeListener
{
/**
* @ORM\preFlush
*/
public function onPreFlush(Foo $foo, PreFlushEventArgs $eventArgs)
{
$em = $eventArgs->getEntityManager();
$uow = $em->getUnitOfWork();
$bar = new Bar();
$bar->setX('test');
$foo->addBar($bar);
$em->persist($bar);
$meta = $em->getClassMetadata(get_class($foo));
$uow->recomputeSingleEntityChangeSet($meta, $foo);
$uow->computeChangeSets(); //This line invokes preFlush listener again
}
}
答案 0 :(得分:1)
在计算更改集之前调度
。换句话说:您拨打PreFlush
和recomputeSingleEntityChangeSet()
的电话不需要 。删除那些,你的听众应该工作正常!
PS:computeChangeSets()
将计算所有更改集,因此您无需同时调用computeChangeSets()
。