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

bla*_*e24 2 mysql doctrine doctrine-orm

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

小智 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
Run Code Online (Sandbox Code Playgroud)

保湿结果后,您将获得如下数组:

array(
    array(
        0 => /* entity instance */,
        'num_users' => 123
    ),
    array(
        0 => /* entity instance */,
        'num_users' => 111
    ),
    // ...
 )
Run Code Online (Sandbox Code Playgroud)

所以你必须过滤结果:

 return array_map(
     function ($result) { return $result[0]; },
     $results
 );
Run Code Online (Sandbox Code Playgroud)

就是这样!

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

  • 如果你写了`c,COUNT(u.id)AS HIDDEN num_users`,你就可以得到你想要的.http://stackoverflow.com/a/13652479/842697 (3认同)