繁体   English   中英

在联接查询中将单个表联接两次

[英]join a single table twice in join query

我有 3 个表用户和会议表和 user_role。 在用户表中,我有 user_name 和 user_role 字段,在会议表中,我有列 meeting_id assign_username 和 created_by_user_name 字段,在 user_roles 表中有 id 和角色。

 users 
  user_name  role   
   a          1
   b          2
   c          3

meeting table 
    meeting_id assigned_username  created_by_user_name
     m1          a                 b
     m2          b                 -
     m3          b                 a

 user_roles
   id  user_role
   1    role1
   2    role2
   3    role3

                           

我想在单个查询中获取assigned_user_name 的user_role 和created_by_user_name 的user_role。 我试过了

  $user=DB::table('meeting')
        ->leftjoin('users','users.user_name','=','meeting_after_validation.assigned_user_name')
        ->leftjoin('users as ca','ca.user_name'),'=','meeting_after_validation.created_by_name')
        ->leftjoin('user_roles','users.user_role','=','user_roles.id')
        ->leftjoin('user_roles as carole','ca.user_role','=','carole.id')
        ->whereIn('carole.is',['1','2'])
        ->select('users.user_name','user_roles.role','carole.role')->toArray();

但得到

调用数组上的成员 function whereIn()

如何获取assigned_user_name 和created_by_user_name 的角色。

如果要将值作为数组获取,则必须先使用get() ,然后才能使用toArray()

此外,您的whereIn可能有错字,应该是carole.id吗?

这是查询在 SQL 中的样子:

SELECT
    
    meeting.meeting_id,
    
    users_assigned.user_name as assigned_user,
    role_assigned.user_role as assigned_user_role,
    
    users_created.user_name as created_user,
    role_created.user_role as created_user_role
    
FROM meeting
    
LEFT JOIN users as users_assigned ON meeting.assigned_username = users_assigned.user_name
LEFT JOIN user_roles as role_assigned ON users_assigned.role = role_assigned.id

LEFT JOIN users as users_created ON meeting.created_by_user_name = users_created.user_name
LEFT JOIN user_roles as role_created ON users_created.role = user_roles.id

WHERE role_assigned.id IN (1, 2)

在 Laravel 查询生成器中:

$user = DB::table('meeting')
    ->select([
        'meeting.meeting_id',
        'users_assigned.user_name as assigned_user',
        'role_assigned.user_role as assigned_user_role',
        'users_created.user_name as created_user',
        'role_created.user_role as created_user_role',
    ])
    ->leftJoin('users as users_assigned', 'meeting.assigned_username', '=', 'users_assigned.user_name')
    ->leftJoin('user_roles as role_assigned', 'users_assigned.role', '=', 'role_assigned.id')
    ->leftJoin('users as users_created', 'meeting.created_by_user_name', '=', 'users_created.user_name')
    ->leftJoin('user_roles as role_created', 'users_created.role', '=', 'user_roles.id')
    ->whereIn('role_assigned.id', [1, 2])
    ->get()
    ->toArray();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM