我应该怎么做才能让所有用户恰好拥有两个角色?因为用户 1 在数据库中有 2 个角色
What should i do to get all the users with exactly two roles? as user 1 has 2 roles in database
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] }
===============响应=========================
[]
===============Table======================= ======
role_user
+===+===+
| 1 | 1 |
| 1 | 2 |
| 2 | 2 |
| 3 | 2 |
| 4 | 2 |
我应该怎么做才能让所有用户恰好拥有两个角色?
因为用户 1 在数据库中有 2 个角色
您可以使用 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:
The whereIn method verifies that a given column's value is contained
within the given array
$users = DB::table('users')
->whereIn('id', [1, 2, 3])
->get();
您可以计算查询中的角色数量,然后将结果用作属性
$users = User::withCount('roles')->get()->where('roles_count',2);
你可以试试这个
Public function getRole()
$users=User::with('roles') - >first () ;
foreach ($users->roles as $user)
{
$list[] =$user->name;
}
dd($list) ;
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] }
===============响应=========================
[]
===============Table======================= ====== role_user
+===+===+
| 1 | 1 |
| 1 | 2 |
| 2 | 2 |
| 3 | 2 |
| 4 | 2 |
我应该怎么做才能让所有用户恰好拥有两个角色? 因为用户 1 在数据库中有 2 个角色
您可以使用 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:
The whereIn method verifies that a given column's value is contained within the given array
$users = DB::table('users')
->whereIn('id', [1, 2, 3])
->get();
您可以计算查询中的角色数量,然后将结果用作属性
$users = User::withCount('roles')->get()->where('roles_count',2);
你可以试试这个
Public function getRole()
$users=User::with('roles') - >first () ;
foreach ($users->roles as $user)
{
$list[] =$user->name;
}
dd($list) ;