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

acquaintsoft logo
Acquaint Softtech

Hire Laravel developers with AI expertise at $20/hr. Get started in 48 hours.

Visit Acquaint Softtech

The latest

View all →
Securing Filament plugins with Plumb image

Securing Filament plugins with Plumb

Read article
LayaPHP: Self-Hosted Text Classification for PHP and Laravel image

LayaPHP: Self-Hosted Text Classification for PHP and Laravel

Read article
WhenMounted and BigInt Props in Inertia.js v3.8 image

WhenMounted and BigInt Props in Inertia.js v3.8

Read article
Postcodes for Laravel: GB Postcode Lookup and Geography Data image

Postcodes for Laravel: GB Postcode Lookup and Geography Data

Read article
Laravel 14 Adds a defaults() Method to Eloquent Models image

Laravel 14 Adds a defaults() Method to Eloquent Models

Read article
Laravel AI SDK and Laravel MCP Security Fixes: Update Now image

Laravel AI SDK and Laravel MCP Security Fixes: Update Now

Read article