You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel关联查询统计用户数报role_user.id不存在错误解决方法

报错原因

role_user是用户与角色多对多关系的中间表,默认不存在id字段,查询构造器中关联roles表时错误使用role_user.id作为关联键,触发字段不存在报错。

错误代码定位

出错的是第二处join的关联条件:

// 错误写法,中间表role_user无id字段
->join('roles', 'role_user.id', '=', 'roles.id')

原构造器还缺少原生SQL中查询的角色名字段,和正常运行的SQL返回结构不一致。

修复方案

将关联条件修改为用中间表的role_id字段关联角色表主键id即可,和原生SQL逻辑完全对齐的代码如下:

// 如需同时返回角色名和对应用户数,用以下写法
$roleUserData = DB::table('users as u')
    ->select('r.name', DB::raw('count(u.id) AS countUser'))
    ->join('role_user as ru', 'u.id', '=', 'ru.user_id')
    ->join('roles as r', 'ru.role_id', '=', 'r.id')
    ->groupByRaw('r.id, r.name')
    ->get();

// 若仅需要各角色用户数的一维数组,可直接用pluck取数
$countUser = DB::table('users as u')
    ->select(DB::raw('count(u.id) AS countUser'))
    ->join('role_user as ru', 'u.id', '=', 'ru.user_id')
    ->join('roles as r', 'ru.role_id', '=', 'r.id')
    ->groupByRaw('r.id')
    ->pluck('countUser');

提示:MySQL 5.7及以上版本默认开启only_full_group_by模式,select查询的非聚合字段必须加入groupBy规则,查询角色名时需要将r.name一并加入分组规则,避免触发SQL模式报错。

内容的提问来源于stack exchange,提问作者baihaqi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 15:15:31