->when($request->query('major'), function (Builder $query, string $major) {
$query->where('major', $major);
$query->whereNotNull('major');
})
Try this or if you can share you major column data it would be helpful
Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.
$students = Student::with([
'user:id,name,image',
'classGroup' => function (Builder $query) use ($request) {
$query
->when($request->query('grade'), function (Builder $query, int $grade) {
$query->where('grade', $grade);
})
->when($request->query('major'), function (Builder $query, string $major) {
$query->where('major', $major);
})
->when($request->query('index'), function (Builder $query, string $index) {
$query->where('index', $index);
})
->select(['id', 'grade', 'major', 'index']);
},
])
->orderByDesc('point')
->limit(10)
->get(['user_id', 'class_group_id', 'point']);
The code above still loads results for students whose classGroup major is not Science (resulting in classGroup = null) when I submit "major=Science" in the query parameter.
Please or to participate in this conversation.