Доктрина 2: Как отсортировать по количеству связанных объектов? - PullRequest
2 голосов
/ 15 декабря 2011

Если у меня есть компания, у которой есть связь «один ко многим» с пользователями, как я могу получить список компаний, отсортированный по количеству пользователей?

1 Ответ

5 голосов
/ 16 декабря 2011

Вот мое решение, но, возможно, это не лучший способ:

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
 );

И это все!

Возможно, вам удастся избежать фильтрации, настраивающей гидратацию.

...