when和unless是Laravel集合中用于条件操作的方法。when在条件为真时执行回调,unless在条件为假时执行,二者均支持链式调用且不修改原集合。示例包括根据用户角色添加数据或过滤非活跃用户,适用于多条件组合处理,提升代码可读性与函数式编程体验。

在 Laravel 中,when 和 unless 是集合(Collection)提供的非常实用的方法,用于根据条件动态执行某些操作。它们让代码更清晰、更可读,尤其适合处理多条件逻辑下的数据处理流程。
当传入的条件为 true 时,when() 方法会执行回调函数。它的第一个参数是一个布尔表达式或回调,第二个参数是满足条件时要执行的操作函数。
基本语法:
collect([...])->when($condition, function ($collection) {
    return $collection->someMethod();
});
示例:根据用户是否为管理员添加额外数据:
$users = collect([
    ['name' => 'Alice', 'role' => 'user'],
    ['name' => 'Bob', 'role' => 'admin']
]);
$processed = $users->when(auth()->check() && auth()->user()->isAdmin(), function ($collection) {
    return $collection->push(['name' => 'System', 'role' => 'hidden']);
});
// 只有当前用户是管理员时,才会添加 System 用户
unless() 正好与 when() 相反:只有当条件为 false 时才执行回调。
适合用于“除非……否则……”的逻辑场景。
$processed = $users->unless($hideInactive, function ($collection) {
    return $collection->filter(fn($user) => $user['active'] ?? true);
});
上面这段代码的意思是:除非 $hideInactive 为 true,否则不过滤非活跃用户。
这两个方法都返回集合本身(支持链式调用),可以组合多个条件进行复杂处理。
$result = collect($data)
    ->when($filters['type'] ?? null, function ($q, $value) {
        return $q->where('type', $value);
    })
    ->when($sorted ?? false, function ($q) {
        return $q->sortBy('name');
    })
    ->unless($withTrashed, function ($q) {
        return $q->reject(fn($item) => $item['deleted']);
    });
说明:
when 的回调第二个参数接收当前值(如过滤值)作为变量unless 常用于排除某种状态下的处理使用 when 和 unless 能有效避免写一堆 if-else,使集合处理更函数式、更优雅。
建议:
基本上就这些。合理使用 when 和 unless,能让集合操作更简洁、条件控制更直观。不复杂但容易忽略的小技巧,值得加入日常开发习惯。
以上就是laravel怎么使用when和unless方法动态构建集合操作_laravel when/unless集合操作构建方法的详细内容,更多请关注php中文网其它相关文章!
 
                        
                        每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
 
                 
                                
                                 收藏
收藏
                                                                             
                                
                                 收藏
收藏
                                                                             
                                
                                 收藏
收藏
                                                                            Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号