当我做的时候
$objectRepository = $objectManager->getRepository(MyEntity::class);
$myEntity = $objectRepository->findOneBy(["some_attribute" => $someValue]);
$myEntity = $objectRepository->findOneBy(["some_attribute" => $someValue]);
Doctrine正在执行2个查询而不只是1:
151205 19:32:58 1265 Query SELECT ... WHERE t0.some_attribute = 'some_value' LIMIT 1
151205 19:32:59 1265 Query SELECT ... WHERE t0.some_attribute = 'some_value' LIMIT 1
我想避免使用缓存进行重复查询,我对其进行了配置:
doctrine:
dbal:
...
orm:
auto_generate_proxy_classes: "%kernel.debug%"
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
metadata_cache_driver: array
result_cache_driver: array
query_cache_driver: array
second_level_cache:
enabled: true
log_enabled: true
region_cache_driver: array
使用array
缓存,因为我只想避免在同一请求中重复查询。
但它不起作用,Doctrine仍在执行重复查询而不是使用缓存......
有什么想法吗? 感谢
答案 0 :(得分:0)
这是因为默认情况下doctrine
未设置为缓存内容。要使您的查询被缓存,您需要手动设置它:
$entity = $objectRepository
->createQueryBuilder('a')
->where(...)
->getQuery()
->useQueryCache(true) //setting query to be cached
->useResultCache(true) //setting result to be cached
->getOneOrNullResult();
要默认设置doctrine缓存内容,请检查this问题
还要确保您处于有效环境中(缓存通常仅在production
env中启用)