News

Laravel “Pipe Through” Collections Method

Published
Laravel “Pipe Through” Collections Method image

Release updates

Never miss a Laravel release

Get an email whenever a new Laravel release lands.

Laravel v8.78.1 introduces a new pipeThrough() collection method, allowing developers to insert an array of pipe callbacks that can manipulate the collection:

Recently merged into Laravel, you will soon be able to call collect()->pipeThrough($pipes) to run a collection through an array of callbacks, passing return values into following pipes 🤩 pic.twitter.com/5m9fThcoaw

— Steve Bauman (@SteveTheBauman) January 5, 2022

The author of the pull request, Steve Bauman, shared an additional example that might help you visualize example use-cases of this method:

$process = [
// Iterate through the health checks and attempt,
// filtering the collection by unsuccessful.
fn ($checks) => $checks->filter(
fn ($check) => ! $check->attempt()
),
 
// Iterate through all the unsuccessful checks
// notifying their users of each failed check.
fn ($unsuccessful) => $unsuccessful->each(
fn ($check) => $check->users()->each(
fn ($user) => $user->notify(
new HealthCheckFailed($check)
)
)
)
];
 
collect(HealthChecks::all())->pipeThrough($process);

The pipeThrough() method is a flexible way to run whatever collection code you have through a series of callbacks and invokable classes. Yet, the implementation is simple. Here’s the pipeThrough method in the Collection class at the time of release:

public function pipeThrough($pipes)
{
return static::make($pipes)->reduce(
function ($carry, $pipe) {
return $pipe($carry);
},
$this,
);
}

A related method in the Collection class is the pipe() method, which accepts a single callable and returns the result of the executed closure.

$collection = collect([1, 2, 3]);
 
$piped = $collection->pipe(function ($collection) {
return $collection->sum();
});

If you’d like to learn more about the pipeThrough method, check out Pull Request #40253. Also, you can see the complete list of changes between 8.78.0 and this week's 8.78.1 release on GitHub.

Paul Redmond photo

Staff writer at Laravel News. Full stack web developer and author.

Sponsored

laravelcloud logo
Laravel Cloud

Easily create and manage your servers and deploy your Laravel applications in seconds.

Visit Laravel Cloud

The latest

View all →
CPX: The Composer Package Executor for PHP image

CPX: The Composer Package Executor for PHP

Read article
Laravel AI SDK Adds Human-in-the-Loop Tool Approval image

Laravel AI SDK Adds Human-in-the-Loop Tool Approval

Read article
Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals image

Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals

Read article
Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs image

Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs

Read article
Blade Formatting in Laravel Pint image

Blade Formatting in Laravel Pint

Read article
Inertia DevTools Is Now on the Chrome Web Store image

Inertia DevTools Is Now on the Chrome Web Store

Read article