[教程] 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 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

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

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

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2

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

5年前 评论

嗯,目的是获取is_active=0USA

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!