when在条件为真时添加查询,unless在条件为假时添加查询,两者结合第三个参数可处理else逻辑,使Laravel查询更简洁清晰。

在 Laravel 的查询构建器中,when 和 unless 是两个非常实用的条件控制方法,用于根据运行时条件动态添加查询逻辑,避免写一堆 if 判断,让代码更简洁清晰。
当你希望在某个值存在或满足条件时才添加查询语句,可以使用 when 方法。
语法如下:
$query->when($condition, function ($query) { ... })只有当 $condition 为 true(或可调用函数返回 true)时,闭包中的查询才会被应用。
示例:根据用户输入的搜索关键词过滤数据
$keyword = request('keyword');User::query() ->when($keyword, function ($query) use ($keyword) { $query->where('name', 'like', "%{$keyword}%"); }) ->get();
如果 $keyword 不为空,就会加上模糊查询;为空则跳过这个条件。
你也可以传入一个回调作为判断条件:
->when(auth()->check(), function ($query) { $query->where('is_active', 1); })unless 正好和 when 相反:只有当条件为 false 时,才会执行闭包中的查询。
语法类似:
$query->unless($condition, function ($query) { ... })示例:仅当用户未提供状态筛选时,默认排除已删除记录
$status = request('status');User::query() ->unless($status, function ($query) { $query->where('deleted_at', null); }) ->get();
也就是说,如果 $status 为空(即没选状态),就自动加个软删除过滤;如果已选择,则不加这个限制。
when 还支持第三个参数,用来处理“否则”逻辑。
->when($condition, function ($query) { /* 条件为真时 */ }, function ($query) { /* 条件为假时 */ } )示例:管理员看全部数据,普通用户只能看自己的
User::query() ->when( auth()->user()->is_admin, function ($query) { // 管理员:不做限制 }, function ($query) { $query->where('id', auth()->id()); } ) ->get();基本上就这些。合理使用 when 和 unless 能让你的查询逻辑更干净,减少 if-else 嵌套,提升可读性。
以上就是Laravel中when和unless条件查询子句怎么用的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号