我已经搜索并尝试了很多,但不幸的是,我没有解决我的问题。所以,我在这里发布我的问题,请查看并建议我一些解决方案。
我有几张表来管理users
,profiles
,groups
和group_user
等用户。现在,我想要检索不是特定组成员的所有用户名。
努力
$users = DB::table('users')
->join('profiles', 'users.id', '=', 'profiles.user_id')
->join('group_user AS gu', 'gu.user_id', '!=', 'users.id')
->join('groups', 'groups.id', '=', 'gu.group_id')
->where('groups.label', '=', $grouplabel)
->lists(DB::raw("CONCAT_WS(' ',profiles.firstname, profiles.lastname) AS name"),'users.id as id');
我正在执行上面的查询以获取不是特定组成员的用户列表,但我现在无法解决它。
如果我更改!= to =
,那么我会获得特定组中所有用户的结果。
因为,您可以看到我有5个用户,其中3个用户拥有管理员组,2个用户没有。如果我运行admin组的查询,那么应该剩下2个用户,或者如果我为测试组运行查询,那么我应该得到5个用户。
答案 0 :(得分:0)
您无需更改join
部分,只需更改或添加where()
部分
$users = DB::table('users')
->join('profiles', 'users.id', '=', 'profiles.user_id')
->join('group_user AS gu', 'gu.user_id', '=', 'users.id') // mark it as '='
->join('groups', 'groups.id', '=', 'gu.group_id')
->where('groups.label', '<>', $grouplabel) // change here, see below description
->lists(DB::raw("CONCAT_WS(' ',profiles.firstname, profiles.lastname) AS name"),'users.id as id');
这会忽略特定群组(例如:profile
),并会返回除此群组以外的所有其他用户(profile)
已修改
我刚从查询中删除了个人资料部分,以验证关系,一旦获得结果,我们将添加个人资料部分,只需运行此查询
select * from users as u
inner join group_user as gu
on
gu.user_id = u.id
inner join groups as g
on
g.id = gu.group_id where
groups.label <> 'Tester'
已编辑2
$users = DB::table('users')
->join('profiles', 'users.id', '=', 'profiles.user_id')
->join('group_user AS gu', 'gu.user_id', '=', 'users.id')
->join('groups', 'groups.id', '=', 'gu.group_id');
//if users exists in specific group
if($users->where('groups.label', '=', $grouplabel)->count() > 0 ){
$result = $users->where('groups.label', '=', $grouplabel)
->lists(DB::raw("CONCAT_WS(' ',profiles.firstname, profiles.lastname) AS name"),'users.id as id');
} // return all users
else{
$result = $users->lists(DB::raw("CONCAT_WS(' ',profiles.firstname, profiles.lastname) AS name"),'users.id as id');
}