You need to enable JavaScript to run this app. Laravel关联查询两次关联users表获取指派人、创建人角色报错如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Laravel关联查询两次关联users表获取指派人、创建人角色报错如何解决

多表关联查询双用户角色解决方案

错误原因

  • 语法错误:第二个leftJoin参数中ca.user_name后多写了一个右括号,导致查询构造器链式调用提前中断返回数组,后续调用whereIn方法时抛出Call to a member function whereIn() on array错误
  • 表名/字段名不匹配:主表为meeting,关联时错误使用了未定义的meeting_after_validation表;created_by_user_name字段被错写为created_by_name;user_roles表主键是id,whereIn中错误使用了不存在的carole.is字段
  • 字段重名风险:两个角色字段都叫role,不设置别名会导致查询结果中后返回的角色值覆盖前一个的结果

正确实现代码

$meetings = DB::table('meeting')
    // 关联会议分配人对应的用户表
    ->leftJoin('users', 'users.user_name', '=', 'meeting.assigned_username')
    // 关联会议创建人对应的用户表,设置别名避免表冲突
    ->leftJoin('users as ca', 'ca.user_name', '=', 'meeting.created_by_user_name')
    // 关联分配人对应的角色表
    ->leftJoin('user_roles', 'users.role', '=', 'user_roles.id')
    // 关联创建人对应的角色表,设置别名避免表冲突
    ->leftJoin('user_roles as carole', 'ca.role', '=', 'carole.id')
    // 过滤创建人角色为1、2的记录
    ->whereIn('carole.id', [1, 2])
    // 所有字段设置别名避免重名覆盖
    ->select(
        'meeting.meeting_id',
        'users.user_name as assigned_username',
        'user_roles.role as assigned_user_role',
        'ca.user_name as created_by_username',
        'carole.role as created_by_user_role'
    )
    ->get()
    ->toArray();

返回结果说明

按你的示例数据运行后,返回的结果会包含meeting_id为m1、m3的两条记录,分别对应分配人和创建人的角色信息,符合你的查询需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 01:06:00