繁体   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