我有DocumentA的事件订户。 DocumentA具有关联的DocumentB类型的文档。在DocumentA的preUpdate生命周期事件挂钩期间,我想刷新其DocumentB上的值。我的代码如下所示:从另一个文档的preUpdate钩子保存一个Doctrine文档的更新?
public function preUpdate(LifecycleEventArgs $args)
{
$document = $args->getDocument();
if (!($document instanceof DocumentA) ||
return;
}
if ($documentsB = $document->getDocumentB()) {
$dm = $args->getDocumentManager();
foreach (iterator_to_array($documentsB) as $docB) {
$documentB = $dm->find(DocumentB::class, $docB->getId());
$documentB->setFooCode();
$dm->merge($documentB);
}
}
}
我已经$dm->persist($documentB)
试过这个,而不是使用merge()
,我给自己定文献展的关系DocumentB到cascade: {all}
,我尝试了$dm->getUnitOfWork()->recomputeSingleDocumentChangeSet($class, $document);
两个文献展和各DocumentB,但我似乎没有得到任何地方。我似乎无法调用flush()
即使对于单个DocumentB也不会导致段错误(我假设它会触发preUpdate事件内的preUpdate事件的无限循环?)
如何将更改保存到我的在DocumentA的事件订阅服务器的preUpdate方法中进行更改时,是否有关联的文档?