Laravel Collection “tap” Method
Published on by Eric L. Barnes
Laravel 5.4.10 introduces a new tap
method on collections which allow you to “tap” into the collection at a specific point and do something with the results while not affecting the main collection.
This feature is best described through examples and let’s pretend you have the following array:
$items = [ ['name' => 'David Charleston', 'member' => 1, 'active' => 1], ['name' => 'Blain Charleston', 'member' => 0, 'active' => 0], ['name' => 'Megan Tarash', 'member' => 1, 'active' => 1], ['name' => 'Jonathan Phaedrus', 'member' => 1, 'active' => 1], ['name' => 'Paul Jackson', 'member' => 0, 'active' => 1]];
Now we convert this into a collection, filter the data, and tap into it at two different points:
return collect($items) ->where('active', 1) ->tap(function($collection){ return var_dump($collection->pluck('name')); }) ->where('member', 1) ->tap(function($collection){ return var_dump($collection->pluck('name')); });
Once this runs it’ll output the following the following for the first tap:
David Charleston, Megan Tarash, Jonathan Phaedrus, Paul Jackson
Then the second:
David Charleston, Megan Tarash, Jonathan Phaedrus
Tap versus Pipe
Laravel also provides another similar method to tap
named pipe
and they are similar in that they can be performed inside a collection pipeline. However, they have one primary difference:
Tap allows you to do something with the data available but it does not modify the original. Pipe modifies the results in the collection based on its return value. For instance:
return collect($items) ->where('active', 1) ->pipe(function ($collection) { return $collection->push(['name' => 'John Doe']); });// David Charleston, Megan Tarash, Jonathan Phaedrus, Paul Jackson, John Doe
Eric is the creator of Laravel News and has been covering Laravel since 2012.