【发布时间】:2014-09-30 20:35:21
【问题描述】:
我在代码中多次使用 Doctrine Entity Manager,例如:
$em = $this->getDoctrine()->getManager();
$countries = $em->getRepository('CommonBundle:Country')->findAll();
可以以这种格式使用 Doctrine Cache 吗?我看到了很多文档,但它们都与 Doctrine Query Builder 相关,有什么建议吗?如何为SELECT查询启用缓存?
缓存不起作用(很难)
我正在处理缓存结果,我这样做是为了缓存一些查询:
-
在
config.ymlorm配置下启用 APC:doctrine: dbal: driver: "%database_driver%" host: "%database_host%" port: "%database_port%" dbname: "%database_name%" user: "%database_user%" password: "%database_password%" charset: UTF8 orm: auto_generate_proxy_classes: "%kernel.debug%" auto_mapping: true metadata_cache_driver: apc result_cache_driver: apc query_cache_driver: apc -
将存储库附加到我的实体:
/** * @ORM\Entity(repositoryClass="CommonBundle\Entity\Repository\CountryRepository") */ class Country { .... -
在存储库类中编写一个方法来获取数据并缓存结果:
public function getCountries() { $qb = $this->createQueryBuilder('c'); $query = $qb->getQuery(); $query->useResultCache(true, 3600, 'countries_cache'); return $query->getResult(); }
但是每当我重新加载页面时,查询都会执行,如分析器中所示(见下图):
我做错了什么?缓存仅适用于生产还是也适用于开发?不应该获取缓存结果而不是一次又一次地查询数据库?
【问题讨论】:
标签: php symfony caching doctrine-orm doctrine