---
title: "when() - умовні фільтри без if/else"
url: https://laravelukraine.com/blog/when-umovni-filtri-bez-ifelse
date: 2026-07-20
---

# when() - умовні фільтри без if/else

Створюєте фільтр пошуку з купою умов if? Це важко читати.

`when()` додає умову до запиту тільки тоді, коли вона потрібна.

**Переваги:**

* Ланцюжок не переривається
* Код виглядає чистіше
* Легко читати
* Без зайвих тимчасових змінних

**Просунутий варіант:**

Є callback для "else".

Порада: Ідеально для API-фільтрів, де параметри опціональні.

```php
// ПОГАНО
$query = User::query();
if ($request->status) {
  $query->where('status', $request->status);
}
if ($request->role) {
  $query->where('role', $request->role);
}
$users = $query->get();

// ДОБРЕ
$users = User::query()
  ->when($request->status,
    fn($q, $v) => $q->where('status', $v))
  ->when($request->role,
    fn($q, $v) => $q->where('role', $v))
  ->get();

// З "else"
$users = User::when(
  $request->sort === 'name',
  fn($q) => $q->orderBy('name'),
  fn($q) => $q->orderBy('created_at')
)->get();
```
