gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 21:35:15 27 4
gpt4 key购买 nike

我为给定实体 Foo 创建了一个实体监听器,它监听 preFlush 事件。每当更新或创建 Foo 实体时,我都想创建一个新的 Bar 实体。我的问题是 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
}
}

最佳答案

PreFlush 事件在计算变更集之前被分派(dispatch)。

换句话说:您对 recomputeSingleEntityChangeSet()computeChangeSets() 的调用在这里不需要。删除那些,你的听众应该工作正常!

PS:computeChangeSets() 将计算所有 变更集,因此您不需要随它一起调用recomputeSingleEntityChangeSet() .

关于php - 在 preFlush 处理程序中保留新的关联实体(无限递归),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21623866/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com