Laravel Collection “tap” Method
Laravel 5.4 / updated: July 11, 2017

Laravel Collection “tap” Method

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

This appeared first on Laravel News
Laravel News Partners

Newsletter

Join the weekly newsletter and never miss out on new tips, tutorials, and more.