原则结果缓存不缓存带有联接的查询



我正在使用条令2.2.2,试图对用户实体和用户的公司进行查询。我希望这个查询被缓存,因为里面的数据不会经常更改(如果有的话)。以下是我尝试过的:

$user = $em->createQuery('
SELECT u, c
FROM EntitiesUser u
LEFT JOIN u.company c
WHERE u.id = :id
')->setParameter('id', $identity)->useResultCache(true, 21600, 'user_' . $identity)->getResult();

看起来,用户实体是缓存的,但它仍然为公司进行查询。有没有一种方法可以同时获取两者,并将它们放入结果缓存?

我确实找到了这个,但它很旧,他的解决方案对我不起作用

有人建议我这样做,但这有点违背了结果缓存的目的。

我已经用条令2.3测试过了,使用:

$q->setResultCacheDriver( new DoctrineCommonCacheApcCache() )
->setResultCacheLifetime( 21600 )
->setResultCacheId( 'user_' . $identity );

当我第一次运行它时,我在sql记录器中看到了实际的查询。
当我第二次、第三次等运行它时,我在sql记录器中看不到任何内容。

我的结论是它运行良好。

我想你要么没有配置结果缓存,要么配置了非永久性结果缓存(如ArrayCache),或者这是Dontrine 2.2.2中的一个错误(尽管我在jira上找不到任何关于它的信息)。

附言:我从另一个问题(条令分离、缓存和合并)中了解到,您已经升级到条令2.3。你还有这个问题吗?

PPS:在条令2.0(我认为是2.2)之后的某个地方,结果缓存发生了变化。不是缓存水合结果,而是缓存sql结果(每次运行都会进行水合)。如果要缓存水合结果,则必须使用水合缓存(但要注意这些结果是而不是合并到EntityManager中)。

相关内容

  • 没有找到相关文章