php - 为什么 Doctrine 2在重复查询时会去DB?

标签 php mysql symfony doctrine-orm doctrine

当我这样做的时候

$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 仍然执行重复的查询而不是使用缓存...

有什么想法吗? 谢谢

最佳答案

这是因为默认情况下 doctrine 未设置为缓存内容。要使您的查询被缓存,您需要手动设置:

$entity = $objectRepository
    ->createQueryBuilder('a')
    ->where(...)
    ->getQuery()
    ->useQueryCache(true) //setting query to be cached
    ->useResultCache(true) //setting result to be cached
    ->getOneOrNullResult();

默认情况下,要使 Doctrine 缓存内容,请检查 this问题 还要确保您处于有效的环境中(通常仅在生产环境中启用缓存)

关于php - 为什么 Doctrine 2在重复查询时会去DB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34109497/

相关文章:

mysql - 数据库表中日期戳列的用途

Symfony 4 文件上传不工作

php - Symfony2 中没有实体属性的表单字段

PHP Foreach 空

php - 居中 div 无法正常工作

php - 向只有一列的 MySQL 表中插入数据

php - 如何从mysql表中获取我的本地时间

php - Mysql group by 和 Left join 关联表 PHP Yii2

php - 使用 cakephp 自动修改特定日期的表记录

css - symfony, knpLabs/snappy, 生成, pdf, 字体,