イベントの実行中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
どうすればこの問題を解決できますか? changeSet 再計算の前に実行するイベントは、インスタンスpreFlush
を決定しません。したがって、更新を「検索」して、それが適切な方法ではないと私に思わせるInitialDocument
のは、ある種のトリックです。preFlush
適当にアドバイスお願いします。ありがとう。