繁体   English   中英

Doctrine结果缓存不缓存带有连接的查询

[英]Doctrine result cache not caching a query with a join

我正在使用Doctrine 2.2.2尝试与用户的公司一起查询用户实体。 我希望缓存此查询,因为内部数据不会经常更改(如果有的话)。 以下是我尝试过的内容:

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

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

我找到了这个 ,但它已经很老了,他的解决方案对我不起作用。

有人建议,我认为我做这个 ,但那种失败的结果缓存的目的。

我用Doctrine 2.3测试了这个:

$q->setResultCacheDriver( new \Doctrine\Common\Cache\ApcCache() )
  ->setResultCacheLifetime( 21600 )
  ->setResultCacheId( 'user_' . $identity );

当我第一次运行它时,我在sql-logger中看到了实际的查询。
当我运行第二,第三等时间时,我的sql-logger中没有看到任何内容。

我的结论是工作正常。

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

PS:我从另一个问题( Doctrine分离,缓存和合并 )中收集到了你升级到Doctrine 2.3的问题。 你还有这个问题吗?

PPS:在Doctrine 2.0之后的某个地方(我认为它是2.2),结果缓存发生了变化。 不是缓存水合结果,而是缓存sql结果(每次运行都会发生水合作用)。 如果你想缓存水合结果,你将不得不使用水合缓存(但是要知道那些结果没有合并到EntityManager中)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM