質問はDoctirneについてですが、私はそれが多くのORMに拡張できると思います。ORMにエンティティを分離してマージする必要があるのはなぜですか?
デタッチ:
エンティティは、EntityManagerのから取り外さず、従ってもはやその上にまたはそれに切り離し操作をカスケード によって
EntityManager#detach($entity)
メソッドを呼び出すことによって を管理されています。デタッチされた エンティティ(エンティティの削除を含む)に加えられた変更は、エンティティがデタッチされた後で がデータベースに同期されません。
マージ:
マージエンティティは、彼らが再び を管理なるようにするEntityManagerのコンテキストに(通常はデタッチ)エンティティ のマージを指します。エンティティの状態をEntityManagerにマージするには、
EntityManager#merge($entity)
メソッドを使用します。渡されたエンティティ の状態は、このエンティティのマネージドコピーにマージされ、このコピーはその後 が返されます。
私は(ほぼ)これがどのように機能するのか理解していますが、質問は次のとおりです。エントリーの分離/マージが必要な理由は何ですか?これらの2つの操作を使用/必要にすることができる場合の例/シナリオを教えてください。
です言ったことを除いて言ったフラッシュについて。 flushメソッドは、エンティティをデータベースと同期させますが、トランザクションの境界内で同期します。これは、まったく同じトランザクション内でクエリを呼び出すときに再生されます。したがって、クエリの処理でこの非常にトランザクションの更新が考慮されることを確認できます。 – Sam
あなたは正しいです@サム、私はフラッシュメソッドに間違っていた。 – manix
これは良い説明(+1)ですが、最初に複数のエンティティマネージャを使用する理由は何ですか? Doctrineを常に1つのエンティティマネージャで使用すると申し訳ありません。 – gremo