Level 3
Took a walk, came back and the answer became obvious...
`` Took a walk. Came back and saw the solution:
public function scopeFilter($query, array $filters)
{
$mealType = $filters['mealType'] ?? null;
$serviceDate = $filters['serviceDate'] ?? null;
$search = $filters['search'] ?? null;
$query
->when($search, function ($query) use ($search) {
$query->where( fn ($query) =>
$query->where('first_name', 'like', '%'.$search.'%')
->orWhere('last_name', 'like', '%'.$search.'%')
->orWhere('sisid', 'like', '%'.$search.'%')
->orWhere('grade', 'like', '%'.$search.'%')
->orWhere('hr', 'like', '%'.$search.'%', 'and'));
})
->when($filters['serviceDate'] ?? null, function ($query, $serviceDate) {
$query->where('enter_date', '<=', $serviceDate)
->where('exit_date', '>=', $serviceDate);
})
->when($filters['grade'] ?? null, function ($query, $grade) {
$query->where('grade', '=', $grade);
})
->when($filters['hr'] ?? null, function ($query, $hr) {
$query->where('hr', '=', $hr);
})
->when( $mealType, function ($query) use ($mealType, $serviceDate) {
$query->whereDoesntHave('student_meals', fn ($query) =>
$query->where('meal_type_id', $mealType )
->where('void', false)
->where('date_served', $serviceDate));
});
}