Doctrine 左连接的条令结果缓存错误。。。有条件

Doctrine 左连接的条令结果缓存错误。。。有条件,doctrine,symfony,left-join,dql,Doctrine,Symfony,Left Join,Dql,在我需要在这里发布问题之前,我倾向于找到答案,但今天我似乎无法找出问题所在 我们在Symfony 2应用程序中使用了Doctrine 2.1.2,在存储库中,我们有两种方法使用几乎相同的查询。 方法A和方法B之间的唯一区别在于,在联接中添加了一个条件,这两个查询都通用 问题在于,条令似乎对两个查询使用相同的结果缓存。 当我们调用方法A时,方法B使用来自A的缓存,反之亦然 我一直在使用expireResultCache(true)和useResultCache(false),但都没有用 以下是查询

在我需要在这里发布问题之前,我倾向于找到答案,但今天我似乎无法找出问题所在

我们在Symfony 2应用程序中使用了Doctrine 2.1.2,在存储库中,我们有两种方法使用几乎相同的查询。 方法A和方法B之间的唯一区别在于,在联接中添加了一个条件,这两个查询都通用

问题在于,条令似乎对两个查询使用相同的结果缓存。 当我们调用方法A时,方法B使用来自A的缓存,反之亦然

我一直在使用expireResultCache(true)和useResultCache(false),但都没有用

以下是查询的内容:

-- 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
当我使用getSQL()时,我看到它们会产生预期的不同查询。生成的查询在数据库中独立运行时,会生成不同的结果

这让我相信,这可能是一个恼人的结果缓存错误,条令不缓存连接的条件,而只缓存表名

这是一个错误,还是我能做些什么


编辑仍然发生在原则2.1.6中。

我认为你的问题在原则2.2中得到了解决。我遇到了与结果缓存相关的类似问题,这里是。

进一步说,条令2是通过

电话:

EntityManager#clear()

清除标识映射并强制EntityManager从数据库中获取对象的新副本。

以防有人无意中发现这个老问题:问题出在椅子和键盘之间。我们没有考虑到这样一个事实,即托管实体的数组集合属性将保持不变,并且不会被连续查询更新。