[教程] Laravel 集合的 “when” 方法
从 v5.4.12 开始,Laravel 集合就有了 when
方法,可以在条件筛选时,保持链式查询。
像其他 Laravel 集合 里的方法一样,when
方法也可以有很多应用场景。我最先想到的就是基于查询语句的过滤操作。
举个例子说明一下,假设现在有一份 Laravel News Podcast 的主持人名单:
$hosts = [
['name' => 'Eric Barnes', 'location' => 'USA', 'is_active' => 0],
['name' => 'Jack Fruh', 'location' => 'USA', 'is_active' => 0],
['name' => 'Jacob Bennett', 'location' => 'USA', 'is_active' => 1],
['name' => 'Michael Dyrynda', 'location' => 'AU', 'is_active' => 1],
];
以往,如果在一个查询语句上,还要有进一步的过滤条件,你可能需要这样写:
$inUsa = collect($hosts)->where('location', 'USA');
if (request('retired')) {
$inUsa = $inUsa->filter(function($employee){
return ! $employee['is_active'];
});
}
通过 when
方法,你就可以在一个链式查询中完成所有的筛选过滤:
$inUsa = collect($hosts)
->where('location', 'USA')
->when(request('retired'), function($collection) {
return $collection->reject(function($employee){
return $employee['is_active'];
});
});
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
学到了,数组转collect的使用方法
嗯,目的是获取
is_active=0
的USA
人