pipe() - кастомна логіка у ланцюжку
Потрібно застосувати складну логіку до всієї колекції?
pipe() передає в callback усю колекцію і повертає те, що callback повернув.
Переваги:
- Гнучка логіка
- Розбиття складних ланцюжків
- Умовні трансформації
- Дебаг
Різниця з map():
- map() - елемент за елементом
- pipe() - вся колекція одразу
Порада: використовувати іменовані функції для читабельності.
$result = $users
->where('active', true)
->pipe(fn($c) => $c->sortBy('last_login')->take(10))
->values();
// Умовне сортування
$posts = Post::all()->pipe(function ($posts) use ($request) {
return $request->sort === 'popular'
? $posts->sortByDesc('views')
: $posts->sortByDesc('created_at');
});
// Дебаг
$result = $users
->where('active', true)
->pipe(fn($c) => tap($c, fn($c) => logger($c->count())))
->where('role', 'admin');