簡體   English   中英

如何使查詢和結果緩存可用於Symfony2和Doctrine2中的關聯實體查詢?

[英]How to make query & result cache working for query of associated entity in Symfony2 and Doctrine2?

我正在使用memcahe作為Symfony Doctrine緩存驅動程序,如下所示:

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

我有與manyToMany關系的ArticleTag實體。 我有一個控制器,用於獲取所有文章(帶有分頁)並將其呈現為細枝。 以下代碼位於使用useQueryCache()useResultCache() Article存儲庫中:

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

該DQL完美地緩存了查詢和結果,因為我沒有在Symfony Profiler教義部分中看到執行查詢。 問題是未緩存關聯的實體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原理一節中看到所有查詢都在每次頁面加載時執行。 是否可以緩存它?

您缺少兩件事:

  1. 您沒有加入tags關系,也沒有從查詢中選擇tags關系
  2. 您還需要啟用快速獲取功能才能正常工作

看一下這里的一些指針: Doctrine2(Doctrine 2.1)渴望在Symfony2中加載

另一方面,如果您期望在該頁面上有很多帶有很多標簽的文章,我會非常小心。 即使使用緩存,您也可能會遇到時間和/或內存問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM