2015-10-07 28 views
1

我使用memcahe詳情如下,Symfony的學說緩存驅動程序:如何讓查詢和結果緩存在Symfony2和Doctrine2中查詢關聯實體?

doctrine: 
    orm: 
     metadata_cache_driver: memcache 
     result_cache_driver: memcache 
     query_cache_driver: memcache 

我有ArticleTag實體它們manyToMany關係。我有一個控制器獲取所有文章(分頁)並呈現給他們。下面的代碼是在使用useQueryCache()useResultCache()Article庫:

$articles = $this->createQueryBuilder('a') 
    ->orderBy('a.created_at', 'DESC') 
    ->getQuery() 
    ->useQueryCache(true) 
    ->useResultCache(true) 
    ->getResult(); 

這DQL完美緩存查詢和結果,因爲我沒有看到Symfony的探查教義部執行的查詢。問題是相關實體Tag未被緩存的結果。我在樹枝下面的代碼:

{% for article in articles %} 
    // ... 
    {% if article.tags|length %} 
     <div class="tag-wrapper clearfix"> 
      {% for tag in article.tags %} 
       // ... 
      {% endfor %} 
     </div> 
    {% endif %} 
    // ... 
{% endfor %} 

呼叫article.tags似乎獲取相關文章的標籤所有的時間沒有緩存。我看到所有查詢都在Symfony Profiler Doctrine部分的每個頁面加載中執行。可以緩存嗎?

回答

2

你錯過了幾件事情:

  1. 你不加入tags關係,你不是從它在查詢中選擇
  2. 你需要有渴望獲取啓用以及爲此工作

看看這裏的一些指針:Doctrine2 (Doctrine 2.1) eager loading in Symfony2

另一方面,如果您預計在該頁面上有大量標籤的文章很多,我會小心這樣做。即使使用緩存,您也可能會遇到時間和/或內存問題。

+0

我在我的頁面有分頁。我沒有在我的問題中提到它。編輯的問題。 – Sithu

+0

我測試過了。它效果很好。 – Sithu

+0

非常好聽! \ O / – annismckenzie

相關問題