>我已经为给定的实体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()
一起调用