簡體   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