Вот мое решение, но, возможно, это не лучший способ:
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
);
И это все!
Возможно, вам удастся избежать фильтрации, настраивающей гидратацию.