[英]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
关系的Article
和Tag
实体。 我有一个控制器,用于获取所有文章(带有分页)并将其呈现为细枝。 以下代码位于使用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原理一节中看到所有查询都在每次页面加载时执行。 是否可以缓存它?
您缺少两件事:
tags
关系,也没有从查询中选择tags
关系 看一下这里的一些指针: Doctrine2(Doctrine 2.1)渴望在Symfony2中加载 。
另一方面,如果您期望在该页面上有很多带有很多标签的文章,我会非常小心。 即使使用缓存,您也可能会遇到时间和/或内存问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.