[英]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.