在 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();
希望对您有所帮助!
到目前为止在这个上花了一整天...
我有实体房间和用户。许多用户到一个房间。这种关系运作良好。
我正在尝试 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();
希望对您有所帮助!