Saya memiliki 3 tabel: Pengguna, Peran, dan tabel pivot RoleUser dengan role_id dan user_id.

Untuk hubungan dalam model saya, saya melakukan itu:

Panutan :

   public function users() {
    return $this->belongsToMany('App\Models\User')->using(RoleUser::class);
}

Model Pengguna:

 public function roles() {
    return $this->hasMany('App\Models\Role')->using(RoleUser::class);
}

Saya melakukan itu untuk memfilter berdasarkan satu peran dan berfungsi dengan baik:

 $roles = Role::find($request->get('role_id'))->first();

 return $roles->users;

Tetapi sekarang saya perlu memfilter pengguna saya dengan banyak peran.

Saya akan mengirim array dari front-end saya dengan id peran.

Sebenarnya saya bisa mendapatkan peran seperti di bawah ini

$roles = Role::whereIn('id', $request->get('role_id'))->get();


 $roles = [{"id":2,"name":"Admin","description":"blabla","created_at":"2018-12-04 09:48:56","updated_at":"2021-04-23 14:53:15"},{"id":3,"name":"developper","description":"blabla","created_at":"2018-12-04 09:51:31","updated_at":"2021-04-23 14:53:15"}]

Tapi saya tidak tahu bagaimana saya bisa mendapatkan pengguna dengan peran ini.

0
Devrico 25 Mei 2021, 16:12

1 menjawab

Jawaban Terbaik

Anda harus melalui koleksi dan mendapatkan setiap pengguna peran dan mengembalikannya dalam satu larik seperti yang ditunjukkan di bawah ini:

$roles = Role::whereIn('id', $request->get('role_id'))->get();
return $roles->map->users->flatten();

Atau Anda melakukannya sebaliknya:

return User::whereHas('roles', function($q) use($request) {
    $q->whereIn('id', $request->get('role_id'));
})->get();
1
shaedrich 25 Mei 2021, 14:43