2017-08-02 5 views
0

:私のコントローラで教義、複数のフラッシュをどのように処理するか()の順で、私は次のシナリオを持っている私のsymfonyの2のアプリケーションでは、

  1. 私がDBからretrivedすなわち、管理エンティティ(上のいくつかの編集を行いますか、エンティティマネージャに保持されます)
  2. コントローラ内(またはコンテナから取得した外部サービス内)に何か他のエンティティで編集を行うか、または いくつかの新しいエンティティをインスタンス化します。私はこれらの操作をフラッシュしたい (これらは2に記載されている)immediatly
  3. 何か他のエンティティを編集したい場合、(1)と(3)の変更をフラッシュしたい。さもなければ、私は(1)と(3)の変更をフラッシュしたくありません。

Doctrineでこれを行う方法はありますか?複数の作業単位を同時に管理するか、それとも類似した作業ですか?そうでなければ、私はこのhttp://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#update-queriesを見ていました。つまり、ポイント(2)で行われた各更新に対して1つのクエリがあり、ポイント(2)で挿入されたのはhttp://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/query-builder.html#sql-query-builderでしたが、より良いアプローチがあるかどうかは疑問でした。

+0

「最良の」アプローチは、ormをまったく使用しないことです。 2つのエンティティマネージャの使用を検討することもできます。 $ em-> flush($ entity)を実行することもできます。しかし、もう一度、ormで「箱から」出ようとすると、いつでも問題に遭遇します。 – Cerad

+0

@セラート私は2つのemを使ってみると思います。 Googleを検索してメソッドのドキュメント '$ em-> flush($ entity);を検索すると、プロよりも多くの問題があるようです。 – ste

答えて

1

を呼び出します。ありがとうございました​​

1

あなたがしたくないdetach実体がフラッシュすることができますし、あなたの「システム」エンティティと「プログラム」のエンティティを分割し、2つの接続を使用することができます$em->flush();

$em->detach($entity); 
+0

デタッチしたエンティティを後でフラッシュしたい場合、それらをマージすることができます: doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/reference/working-with-objects.html#merging-entities – Vladislav

+0

@Vladislav this (1)で何が起こったのか正確に知っていましたが、私はこの仮定をすることはできません – ste

+0

あなたは何かが間違っているかどうかを見つけるためにtry-catchブロックを使ってエンティティの配列を準備することができます$ em-> flush()を実行して、配列内の各エンティティに対して$ em-> clear($ entity)を実行します。 –

関連する問題