在laravel 5.2中获取不在特定组中的所有用户

时间:2016-03-14 05:04:04

标签: php laravel-5.2

我已经搜索并尝试了很多,但不幸的是,我没有解决我的问题。所以,我在这里发布我的问题,请查看并建议我一些解决方案。

我有几张表来管理usersprofilesgroupsgroup_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 =,那么我会获得特定组中所有用户的结果。

图像中的表记录和结构。 record in DB

因为,您可以看到我有5个用户,其中3个用户拥有管理员组,2个用户没有。如果我运行admin组的查询,那么应该剩下2个用户,或者如果我为测试组运行查询,那么我应该得到5个用户。

1 个答案:

答案 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');
}