我正在使用doctrine-mongodb-odm-1.0.0-BETA10
并尝试提供一些基于事件运行\InitialDocument
时的自定义逻辑。preUpdate
假设\InitialDocument
获得了一些状态,该状态必须作为 new 的初始状态\StateDocument
。我正在做这样的事情:
class InitDocListener implements \Doctrine\Common\EventSubscriber {
public function getSubscribedEvents()
{
return [
Events::preUpdate
];
}
public function preUpdate($args){
$document = $args->getDocument();
if($document instanceOf InitialDocument && $document->getState() == 'mine'){
$stateDocument = new \StateDocument();
$stateDocument->setInitDocument($document);
$args->getDocumentManager()->persist($stateDocument);
//no flush cause recursion happens
}
}
}
prePersist
事件\StateDocument
发生了,但它不会在数据库中保留新文档。并且postPersist
相应的事件将永远不会被触发。
还有一些更多的自定义逻辑,但都在事件范围内。在某些时候,逻辑可能会抛出一个必须停止更新事件的异常,InitialDocument
因此InitialDocument
状态取决于\StateDocument
业务范围内的创建过程。
我怎么解决这个问题?preFlush
在 changeSet 重新计算之前运行的事件不确定InitialDocument
实例。因此,“搜索”更新是一种技巧,preFlush
让我认为这不是正确的方法。请给我适当的建议。谢谢。