我已经阅读了与性能相关的symfony2文档,我已经实现了以下步骤。
修改我的学说配置
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
现在,如果我调用一个动作从数据库中检索所有用户,我会在底部的信息栏中看到每次114次查询时都会执行该学说。为什么查询没有缓存?
我的行动如下:
$users = $this->getDoctrine()->getRepository('AppUserBundle:User')->findAll();
return $this->render('AppUserBundle:User:index.html.twig', array('users' => $users));
答案 0 :(得分:3)
默认情况下,Doctrine不会缓存查询结果。您必须明确指出要使用useResultCache
方法缓存查询。例如,如果您想要缓存获取所有用户,请在User repository类中编写您自己的方法:
use Doctrine\ORM\EntityRepository;
class UserRepository extends EntityRepository
{
public function fetchAll()
{
$query = $this->createQueryBuilder('u')->getQuery();
return $query->useResultCache(true)->getResult();
}
}
该方法可能需要额外的参数:
public function useResultCache($bool, $lifetime = null, $resultCacheId = null)
true
null
Doctrine会处理那个