ここで質問を投稿する前に回答を見つける傾向がありますが、今日は何が間違っているかわかりません。LEFT JOIN ... WITH条件付きDoctrine結果キャッシュバグ
Symfony 2アプリでDoctrine 2.1.2を使用しています。リポジトリには、ほぼ同じクエリを使用する2つのメソッドがあります。 メソッドAとメソッドBの唯一の違いは、両方のクエリに共通するJOINに条件が追加されていることです。
Doctrineは両方のクエリで同じ結果キャッシュを使用しているようです。 メソッドAを呼び出すと、メソッドBはAのキャッシュを使用します。
私はexpireResultCache(true)とuseResultCache(false)を使用していません。ここで
は、クエリがどのように見えるかです:私はgetSQL()を使用する場合
-- method A
SELECT DISTINCT a, b, c FROM MyBundle:ObjectA a INDEX BY a.id
LEFT JOIN a.fkObjectB b
LEFT JOIN a.fkObjectC c
-- method B
SELECT DISTINCT a, b, c FROM MyBundle:ObjectA a INDEX BY a.id
LEFT JOIN a.fkObjectB b WITH b.some_field IS NULL
LEFT JOIN a.fkObjectC c
、私は予想通り、彼らは別のクエリにつながることがわかります。生成されたクエリは、データベース内で独立して実行されると、異なる結果を生成します。
これは、DoctrineがJOINの条件をキャッシュせず、テーブル名だけをキャッシュする、厄介な結果キャッシュのバグであると信じています。
これはバグですか、それとも私ができることはありますか?
EDIT Doctrine 2.1.6でも同様のことが起こります。
誰かがこの古い質問に絡み合った場合に備えて:問題は椅子とキーボードの間にありました。 管理対象エンティティの配列コレクションプロパティが同じままであり、連続するクエリによって更新されないという事実を考慮していませんでした。 –