Вы используете неправильный синтаксис для when () . Вы используете его в идеальном сценарии, и вы можете не инициализировать указанную выше переменную.
Laravel 5.2 -> 5.5
$class_id = isset($searchData[1]) ? $searchData[1] : '';
$students = \User::where('role','student')
->where('fullName','like','%'.$student_name.'%')
->orWhere('username','like','%'.$student_name.'%')
->orWhere('email','like','%'.$student_name.'%')
->when($class_id, function ($query) use ($class_id) {
return $query->where('studentClass','=', $class_id);
})->get();
Laravel 5.6 +
$students = \User::where('role','student')
->where('fullName','like','%'.$student_name.'%')
->orWhere('username','like','%'.$student_name.'%')
->orWhere('email','like','%'.$student_name.'%')
->when($searchData[1], function ($query, $class_id) {
return $query->where('studentClass','=', $class_id);
})->get();