我正在尝试创建一个查询,用于从 Doctrine 数据库中检索对象,并按特定一对多关系的成员数量排序。
更具体地说:我有两个实体:Person 和 Federation。一个人可以是一个联盟的成员(人具有“联盟”关系),并且一个联盟可以有n人(联邦作为“人”的关系)。
我想创建一个 DQL 查询,它将返回联盟列表,按该联盟成员的人数排序。沿着这些思路:
SELECT f FROM AcmeStatsBundle:Federation f ORDER BY [number of members of f.people]
这将是第一步。还有一个额外的第二步,我不知道是否可以通过单个查询来实现,这将在计数之前过滤关系的成员。就像这样:
SELECT f FROM AcmeStatsBundle:Federation f ORDER BY [number of (f.people p where p.attr = value)]
第二种情况将是最佳结果,但如果第二种情况在单个查询中不可行,则第一种情况可以满足我的需求。
提前致谢。
你可以做一些类似的事情:
public function getFederationsOrderedByNumberOfPeople()
{
return $this->createQueryBuilder('f')
->addSelect('COUNT(p) AS HIDDEN personCount');
->leftJoin('f.people', 'p');
->groupBy('f')
->orderBy('personCount', 'DESC');
}
Doctrine 2.2 中添加了 HIDDEN 关键字,这意味着所选字段不会出现在结果中,在这种情况下,这意味着您只是取回实体而不是数组。
参考 DQL SELECT 文档:http://doctrine-orm.readthedocs.org/en/latest/reference/dql-doctrine-query-language.html#dql-select-examples http://doctrine-orm.readthedocs.org/en/latest/reference/dql-doctrine-query-language.html#dql-select-examples
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)