How to make a filter in Laravel for multiple parameters?
There are many ways to make a filter in Laravel. In this article, we will show you the two best ways.
- Build your own filter by using your own logic. This method will help you in complex conditions.
$result = Post::query();
if (!empty($text)) {
$result = $result->where('text', 'like', '%'.$text.'%');
}
if (!empty($date)) {
$result = $result->whereDate('created_at', \Carbon\Carbon::parse($date));
}
if (!empty($category)) {
$result = $result->where('category', $category);
}
if (!empty($city)) {
$result = $result->where('city', 'like', '%'.$city.'%');
}
$result = $result->get();2. Using when clause in Laravel
Post::when($text, function ($q) use ($text) {
return $q->where('text', 'like', '%'.$text.'%');
})
->when($date, function ($q) use ($date) {
return $q->whereDate('created_at', \Carbon\Carbon::parse($date));
})
->when($category, function ($q) use ($category) {
return $q->where('category', $category);
})
->when($city, function ($q) use ($city) {
return $q->where('city', 'like', '%'.$city.'%');
})
->get();
