tap() - дебаг без зміни ланцюжка
Потрібно подивитися стан колекції в середині ланцюга?
tap() дозволяє "підглянути" в колекцію, не змінюючи її.
Як працює:
Callback отримує колекцію, але повернуте значення ігнорується.
Сценарії:
- Дебаг
- Логування
- Побічні ефекти
Різниця з pipe():
- pipe() використовує значення, яке повернув callback
- tap() ігнорує і продовжує з оригіналом
$result = $users
->where('active', true)
->tap(fn($c) => logger("Active: {$c->count()}"))
->where('role', 'admin')
->tap(fn($c) => logger("Admins: {$c->count()}"))
->get();
// Порівняння
$collection->pipe(fn($c) => $c->count()); // повертає число
$collection->tap(fn($c) => $c->count()); // повертає колекцію