Doctrine 2双字段GROUP BY查询返回结果不正确问题求助
问题修复方案
核心问题点
- 参数绑定错误:你代码中给
states参数赋值时使用了array($states),如果$states本身就是存储待查询状态的一维数组,这会将其封装为二维数组,导致IN条件无法正确匹配所有指定状态,最终只会返回匹配到的第一个状态的统计结果,也就出现了每个用户仅返回一条记录的问题。 - 缺少排序逻辑:你需要按任务类型/状态排序的话,要显式调用
orderBy方法指定排序规则。
修正后的代码
$this->createQueryBuilder('t') ->select('t.assignee, COUNT(t.id) as count, t.state') ->join('t.assignee', 'user') ->andWhere('t.state IN (:states)') ->setParameter('states', $states) // 去掉多余的array包裹,直接传入状态数组 ->addGroupBy('t.assignee') ->addGroupBy('t.state') ->orderBy('t.assignee') // 优先按任务负责人排序 ->addOrderBy('t.state') // 其次按任务状态排序,可替换为你需要的任务类型字段 ->getQuery() ->getResult();
补充说明
如果你需要返回负责人的可读信息(比如用户名、用户ID),可以把select部分调整为
select('user.id as user_id, user.username as assignee_name, COUNT(t.id) as count, t.state'),返回结果的可读性会更高。
内容的提问来源于stack exchange,提问作者Ruben Lech
相关产品推荐
相关产品推荐

