在 preFlush 处理程序中保留新的关联实体(无限递归)



>我已经为给定的实体Foo创建了一个实体侦听器,用于侦听preFlush事件。我想在更新或创建Foo实体时创建一个新的Bar实体。 我的问题是 preFlush 事件再次由computeChangeSets()触发,导致无限循环。有人有解决方案或替代方法来处理此用例吗?

class SomeListener
{
/**
* @ORMpreFlush
*/
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
}
}

在计算更改集之前调度PreFlush事件。

换句话说:这里不需要您拨打recomputeSingleEntityChangeSet()computeChangeSets()。删除这些,您的听众应该可以正常工作!

PS:computeChangeSets()将计算所有更改集,因此您无需随recomputeSingleEntityChangeSet()一起调用

最新更新