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

在 Laravel 的查询构建器中,when 和 unless 是两个非常实用的条件控制方法,用于根据运行时条件动态添加查询逻辑,避免写一堆 if 判断,让%ignore_a_1%码更简洁清晰。
when:满足条件时执行查询
当你希望在某个值存在或满足条件时才添加查询语句,可以使用 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:不满足条件时执行查询
unless 正好和 when 相反:只有当条件为 false 时,才会执行闭包中的查询。
STORYD
帮你写出让领导满意的精美文稿
137 查看详情
语法类似:
$query->unless($condition, function ($query) { … })
示例:仅当用户未提供状态筛选时,默认排除已删除记录
$status = request(‘status’);
User::query()->unless($status, function ($query) {$query->where(‘deleted_at’, null);})->get();
也就是说,如果 $status 为空(即没选状态),就自动加个软删除过滤;如果已选择,则不加这个限制。
结合 else 场景使用 when 的第三个参数
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条件查询子句怎么用的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/830727.html
微信扫一扫
支付宝扫一扫