Что я должен сделать, чтобы получить всех пользователей с двумя ролями?как пользователь 1 имеет 2 роли в базе данных - PullRequest
1 голос
/ 27 сентября 2019

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] }

=============== Ответ =========================

[]

=============== Таблица ====================================== role_user

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

Что мне делатьполучить всех пользователей с двумя ролями?как пользователь 1 имеет 2 роли в базе данных

Ответы [ 3 ]

0 голосов
/ 27 сентября 2019

Вы можете подсчитать количество ролей в вашем запросе, а затем использовать результат в качестве атрибута

$users = User::withCount('roles')->get()->where('roles_count',2);
0 голосов
/ 27 сентября 2019

Вы можете попробовать это

Public function getRole()
$users=User::with('roles') - >first () ;
foreach ($users->roles as $user)
 {
$list[] =$user->name;
}
dd($list) ;
0 голосов
/ 27 сентября 2019

Вы можете использовать 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));
});

Из документов :

Метод whereIn проверяет, содержится ли значение данного столбца в данном массиве

$users = DB::table('users')
    ->whereIn('id', [1, 2, 3])
    ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...