2016-12-04 5 views
0

MongoDBとDoctrineの両方でかなり新しいです。私は現在、フレームワークのモデルシステムをセットアップしていて、イベントを実装しようとしています。Doctrine ODM PreUpdateイベントで別の文書を変更する

考え方は次のとおりです。特定のモデルが更新されると、新しいユーザー(モデル)も作成/更新する必要があります。私はPreUpdateイベントでこれをすべて行うので、変更をキャッチすることができます(モデルの電子メールアドレスが変更されているかどうかを確認してください)。

このイベントで新しいモデルを作成して保存することは魅力的ですが、ユーザーを更新しようとするとデータを保存できません。私はフラッシュを試みましたが、これは無限ループを引き起こします(なぜ、彼は同じ文書を再びフラッシュしようとするのか理解できます)。

どのような方法で私はこれを行う必要がありますか?ユーザーの作業単位でRecomputeSingleDocumentChangeSetを試しましたが、これは何も保存していないようです。

答えて

0

ユーザーの作業ユニットの単精度再計算セットを試しましたが、これは何も保存していないようです。

これは、あなたがすでにflush内にあるとして、特にflushを使用していない、あなたは(ユーザーのフィールドを変更した後)

$user->setSomething(true); 
$uow->recomputeSingleDocumentChangeSet(/* ... */); 

と他には何を行う必要があります正確に何です。 recomputeSingleDocumentChangeSetは、ドキュメントの更新クエリに後で含まれるDoctrineの再カウント変更を行います。

このイベントで新しいモデルを作成し、永続化は魅力

このように動作します、新しいオブジェクトがpreUpdateイベントの時に持続としてしかし奇妙に聞こえるあなたは別のものを発行していない限り(データベースに到達していなければならないflush更新前に挿入が処理されるため、この時点で望ましくない副作用が生じる可能性があります)。

+0

良い説明のためにこれを答えとしてマークするつもりです。残念ながら、これは私のケースでは役に立たず、私は全く違った方法で解決しました。しかし、ちょっと、技術、そうですか? :-) –

関連する問題