symfony - 学说额外的延迟加载无法按预期与计数一起工作

标签 symfony doctrine-orm twig

我有一个实体 Shop和相关实体 ShopProduct ,具有以下关系:

/**
 * @ORM\OneToMany(targetEntity="ShopProduct", mappedBy="shopid", fetch="EXTRA_LAZY")
 */
private $products;

在 Twig 模板中,我想访问 计数 products ,所以我访问
{{ entity.getProducts().count }}

但是当使用 symfony2 分析器查看查询的数量和内容时,我看到发出了一个完整的选择,而不是 COUNT我希望(基于 the documentation )。

为每个 Shop 发出完整的选择s 导致 250Mb+ 的内存使用和 30+ 秒的页面加载时间,这是不希望的。

添加后 fetch="EXTRA_LAZY"我已经清除了教义缓存。

我是否忽略了某些东西,使用了错误的方法或误解了文档?

[编辑]
doctrine/annotations                v1.1
doctrine/cache                      v1.0
doctrine/collections                v1.1
doctrine/common                     2.4.0-RC1
doctrine/data-fixtures              dev-master eef10f6
doctrine/dbal                       2.3.3
doctrine/doctrine-bundle            v1.2.0-beta1
doctrine/doctrine-fixtures-bundle   dev-master 275540d
doctrine/doctrine-migrations-bundle dev-master 99c0192
doctrine/inflector                  v1.0
doctrine/lexer                      v1.0
doctrine/migrations                 dev-master e1f6efc
doctrine/orm                        2.3.3

最佳答案

刚遇到同样的问题,解决方法很简单:
{{ value.getAlerts.count() }}
代替
{{ value.getAlerts.count }}
Twig 必须凌驾于教义之上 count()方法意味着“额外的延迟加载”,它自己的实现的一个变体只是愚蠢地获取所有实体来计算它们。

这将所有预期的 SELECT * 查询变成了 COUNT(*) ...

关于symfony - 学说额外的延迟加载无法按预期与计数一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15645911/

相关文章:

php - symfony 2.5 内容可编辑网页并保存

php - 带有键的数组的 Twig for 循环

symfony - 在 Symfony2/Twig 中获取表单小部件名称

php - Doctrine2 错误 "Expected known function, got ' COUNT'"when in order by clause

php - 当方法需要参数时,如何在 Symfony 4.3.x 中正确地自动连接接口(interface)?

Symfony2 容器感知表单类型

symfony - Doctrine left join wherejoined table is null 显示结果

php - Doctrine 前缀可嵌入

doctrine-orm - doctrine 2 oracle datetime 列在插入实体上显示 "not a valid month"

javascript - 如何在javascript中恢复twig的多个值?