【发布时间】:2012-02-17 15:48:53
【问题描述】:
我倾向于在需要在这里发布问题之前找到答案,但今天我似乎无法找出问题所在。
我们在 Symfony 2 应用程序中使用 Doctrine 2.1.2,在存储库中我们有两种使用几乎相同查询的方法。 方法 A 和方法 B 之间的唯一区别是在 JOIN 中添加了两个查询共有的条件。
问题在于 Doctrine 似乎对两个查询使用相同的结果缓存。 当我们调用方法 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() 时,我看到它们会按预期产生不同的查询。生成的查询在数据库中独立运行时会产生不同的结果。
这让我相信这可能是一个烦人的结果缓存错误,其中 Doctrine 不缓存 JOIN 的条件,而只缓存表名。
这是一个错误,还是我能做些什么?
编辑仍在 Doctrine 2.1.6 中发生。
【问题讨论】:
标签: doctrine symfony left-join dql