Laravel 集合“tap”方法
发布时间 作者 Eric L. Barnes
Laravel 5.4.10 引入了一个新的 tap
方法,用于集合,允许您在特定点“访问”集合,并对结果进行操作,而不会影响主集合。
这个功能最好通过例子来解释,假设您有以下数组
$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]];
现在我们将它转换为一个集合,过滤数据,并在两个不同的点访问它
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')); });
运行后,它将输出以下第一个访问结果
David Charleston, Megan Tarash, Jonathan Phaedrus, Paul Jackson
然后是第二个
David Charleston, Megan Tarash, Jonathan Phaedrus
Tap 与 Pipe
Laravel 还提供了另一个类似于 tap
的方法,名为 pipe
,它们在集合管道中可以执行类似的操作。但是,它们有一个主要区别
Tap 允许您对可用数据执行操作,但不会修改原始数据。Pipe 会根据其返回值修改集合中的结果。例如
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