在 Doctrine QueryBuilder 中,尝试根据相关实体记录的数量 select 记录

In Doctrine QueryBuilder, trying to select records based on number of related entity records

到目前为止在这个上花了一整天...

我有实体房间和用户。许多用户到一个房间。这种关系运作良好。

我正在尝试 select 所有相关用户少于四个的房间。似乎使用 DQL 或 QueryBuilder 应该非常简单,但它一直给我带来麻烦。无法找到任何完全适合搜索的内容。最常见的意外结果是 a) 不返回任何结果 b) 返回一个可能有也可能没有 <4 个用户的结果。

下面是我预期的代码。任何帮助将不胜感激,谢谢!

$rooms_with_space = $em->createQueryBuilder()
    ->select('c')
    ->from('MyBundle:Room', 'c')
    ->leftJoin('c.users', 'u')
    ->having('COUNT(u.id) > 4')
    ->getQuery()
    ->getResult();

据我所知,当有 GROUP BY 时,HAVING 上的 COUNT 函数起作用。

我认为您需要添加房间 ID 的 GROUP BY:

$rooms_with_space = $em->createQueryBuilder()
    ->select('c')
    ->from('MyBundle:Room', 'c')
    ->leftJoin('c.users', 'u')
    ->groupBy('c.id')
    ->having('COUNT(u.id) > 4')
    ->getQuery()
    ->getResult();

希望对您有所帮助!