[教程] 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'];
        });
    });

Practice makes perfect.

原文地址:https://laravel-news.com/laravel-collect...

译文地址:https://learnku.com/laravel/t/26331

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 2
__中国人

学到了,数组转collect的使用方法

2周前

嗯,目的是获取is_active=0USA

1周前

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!