我应该怎么做才能使所有用户都具有完全两个角色?由于用户1在数据库中具有2个角色

时间:2019-09-27 13:54:36

标签: php laravel laravel-5.8

User.php

public function roles(){ return $this->belongsToMany(Role::class); }

Role.php

public function users(){ return $this->belongsToMany(User::class); }

UserController.php

$user = User::whereHas('roles', function ($q) use ($request) { $q->where('role_id', $request->roles); })

================请求======================

{ "roles":[1,2] }

===============响应========================

[]

===============表================================ 角色用户

+===+===+
| 1 | 1 |
| 1 | 2 |
| 2 | 2 |
| 3 | 2 |
| 4 | 2 |

我应该怎么做才能使所有用户都具有完全两个角色? 因为用户1在数据库中有2个角色

3 个答案:

答案 0 :(得分:0)

您可以使用whereIn来仅获得具有提供的role_ids的用户:

角色1 2:

$user = User::whereHas('roles', function ($q) use ($request) {
    $q->whereIn('role_id', $request->roles); // $request->roles needs to be an array
});

角色1 2:

$user = User::whereHas('roles', function ($q) use ($request) {
    $q->whereIn('role_id', $request->roles)
        ->groupBy('user_id')
        ->havingRaw('COUNT(DISTINCT role_id) = '.count($request->roles));
});

来自docs

  

whereIn方法验证是否包含给定列的值   在给定的数组中

$users = DB::table('users')
    ->whereIn('id', [1, 2, 3])
    ->get();

答案 1 :(得分:0)

您可以计算查询中的角色数量,然后将结果用作属性

$users = User::withCount('roles')->get()->where('roles_count',2);

答案 2 :(得分:0)

您可以尝试

Public function getRole()
$users=User::with('roles') - >first () ;
foreach ($users->roles as $user)
 {
$list[] =$user->name;
}
dd($list) ;