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

时间:2017-03-30 23:15:37

标签: mysql symfony doctrine-orm doctrine dql

到目前为止,这一天花了一整天......

我有实体房间和用户。很多用户来到一个房间。这种关系很有效。

我试图选择所有少于四个相关用户的房间。看起来它应该是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();

1 个答案:

答案 0 :(得分:1)

据我所知,HAVING的COUNT函数在有GROUP BY时有效。

我认为你需要添加一个房间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();

希望这可以帮到你!