【发布时间】:2014-12-31 21:53:14
【问题描述】:
我有一个 DocumentA 的事件订阅者。 DocumentA 具有 DocumentB 类型的关联文档。在 DocumentA 的 preUpdate 生命周期事件挂钩期间,我想刷新其 DocumentB 上的值。我有这样的代码:
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(),我已将 DocumentA 与 DocumentB 的关系设置为 cascade: {all},并且我已为 DocumentA 和每个 DocumentB 尝试了 $dm->getUnitOfWork()->recomputeSingleDocumentChangeSet($class, $document);,但我没有似乎无处可去。即使是单个 DocumentB,我似乎也无法调用 flush() 而不会导致段错误(我假设它会触发 preUpdate 事件中的 preUpdate 事件的无限循环?)
在 DocumentA 的事件订阅者的 preUpdate 方法中进行更改时,如何保存对关联文档的更改?
【问题讨论】:
标签: mongodb symfony doctrine-orm lifecycle doctrine-odm