Get all users with role in Laravel

If you are using spatie/laravel-permission or backpack/permissionmanager you can simply do:

$teachers = User::role('Teacher')->get();

What you're currently asking laravel for in your $students query, is 'give me all the students, and for each student get me all of their roles if the role is teacher'

Try using the whereHas

$students = User::whereHas(
    'roles', function($q){
        $q->where('name', 'Teacher');
    }
)->get();

This should get you the users, but only where they have a role where the name is teacher.


Try This.

Role::where('rolename', 'user')->first()->users()->get()