学说2:如何按相关实体的数量排序?

时间:2011-12-14 22:36:36

标签: mysql doctrine doctrine-orm

如果我有一个公司实体,与用户实体有一对多关联,我如何获得公司实体列表,按用户数量排序?

1 个答案:

答案 0 :(得分:5)

这是我的解决方案,但它可能不是最佳方式:

SELECT 
    c, COUNT(u.id) as num_users
FROM
    Acme\Model\Company c
    LEFT JOIN c.users u
GROUP BY
    c.id
ORDER BY
    num_users DESC

在对结果进行保湿后,您将获得如下数组:

array(
    array(
        0 => /* entity instance */,
        'num_users' => 123
    ),
    array(
        0 => /* entity instance */,
        'num_users' => 111
    ),
    // ...
 )

所以你必须过滤结果:

 return array_map(
     function ($result) { return $result[0]; },
     $results
 );

就是这样!

也许你可以避免过滤部分调整水化部分。