Use when() for Cleaner Queries

Laravel Tip: Use when() for Cleaner Queries

  • 05 Jun, 2025
  • 351 Views

Use when() for Cleaner Queries

Writing conditional queries in Laravel often gets messy with if statements. Luckily, Laravel gives us a neat helper: when().

Instead of this:

$query = User::query();
if (request('role')) {
    $query->where('role', request('role'));
}
if (request('active')) {
    $query->where('active', true);
}
$users = $query->get();

You can write this:

$users = User::query()
    ->when(request('role'), fn($q, $role) => $q->where('role', $role))
    ->when(request('active'), fn($q) => $q->where('active', true))
    ->get();

✅ Cleaner

✅ More readable

✅ No repeated if blocks

Share: