when() - умовні фільтри без if/else
Створюєте фільтр пошуку з купою умов if? Це важко читати.
when() додає умову до запиту тільки тоді, коли вона потрібна.
Переваги:
- Ланцюжок не переривається
- Код виглядає чистіше
- Легко читати
- Без зайвих тимчасових змінних
Просунутий варіант:
Є callback для "else".
Порада: Ідеально для API-фільтрів, де параметри опціональні.
// ПОГАНО
$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();