我有一个实体 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/