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.