Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

philipbaginski's avatar

Laravel Nova filer

Hi everyone!

I'm facing problem with filter. I have 'A' resource belongsTo to 'B' resource, and 'B' resource belongsTo 'C' resource. In index view of 'A' resource I have a filter. This filter should query column in 'C' resource. I know how to make filter to query column in resource 'B', but no idea how to go one level deeper.

Any help?

0 likes
6 replies
wingly's avatar

Not sure if i understand but you can always do

$query->whereHas('relationB.relationC, function ($q) use ($value) {
	$q->where('column, $value);
})
philipbaginski's avatar

I think it is a good path. Can you help me write a sample? Resourse 'A' name is Race. Resource 'B' name is Raceday, and resource 'C' name is Racecourse. Race->belongsTo->Raceday->belongsTo->racecourse. Below is a code for 'one level' filter:

public function apply(Request $request, $query, $value) { return $query->where('race_class_id', $value); }

public function options(Request $request)
{
    $models = \App\RaceClass::where('id', '<', 10);
    return $models->pluck('id', 'name');
}
philipbaginski's avatar

End up with this piece of code:

return $query->whereHas('raceday.racecourse', function ($q) use ($value) { $q->where('id', $value); });

Is it proper?

philipbaginski's avatar

Thank you. I have one question more and no answer: I have a filter with date field and I don't know how to format select field. Resource Raceday has field 'date'. The options for select:

public function options(Request $request)
{
    $models = \App\Raceday::whereYear('date', '>', 2018)->orderBy('date', 'asc');
    return $models->pluck('id', 'date');
}

, and in select field I have eg.: 2019-06-12 00:00:00 and no idea how to get only date without time.

Please or to participate in this conversation.