Laravel中when和unless条件查询子句怎么用

发布时间 - 2025-11-12 00:00:00    点击率:
when在条件为真时添加查询,unless在条件为假时添加查询,两者结合第三个参数可处理else逻辑,使Laravel查询更简洁清晰。

在 Laravel 的查询构建器中,whenunless 是两个非常实用的条件控制方法,用于根据运行时条件动态添加查询逻辑,避免写一堆 if 判断,让代码更简洁清晰。

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 时,才会执行闭包中的查询。

语法类似:

$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();

基本上就这些。合理使用 whenunless 能让你的查询逻辑更干净,减少 if-else 嵌套,提升可读性。


# word  # laravel  # NULL  # if  #   # 闭包  # function  # 第三个  # 为空  # 才会  # 自己的  # 包中  # 就会  # 当你  # 能让  # 不做  # 可以使用 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在局域网内绑定自建网站域名?  如何在IIS7中新建站点?详细步骤解析  html文件怎么打开证书错误_https协议的html打开提示不安全【指南】  Android Socket接口实现即时通讯实例代码  Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】  创业网站制作流程,创业网站可靠吗?  Win11关机界面怎么改_Win11自定义关机画面设置【工具】  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  Laravel Debugbar怎么安装_Laravel调试工具栏配置指南  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  Android自定义控件实现温度旋转按钮效果  如何基于云服务器快速搭建个人网站?  HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】  潮流网站制作头像软件下载,适合母子的网名有哪些?  如何快速启动建站代理加盟业务?  详解阿里云nginx服务器多站点的配置  如何在不使用负向后查找的情况下匹配特定条件前的换行符  Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控  Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践  Laravel怎么解决跨域问题_Laravel配置CORS跨域访问  Laravel distinct去重查询_Laravel Eloquent去重方法  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  如何在IIS中配置站点IP、端口及主机头?  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  如何实现建站之星域名转发设置?  宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法  百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】  如何获取上海专业网站定制建站电话?  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  如何为不同团队 ID 动态生成多个独立按钮  Laravel中的Facade(门面)到底是什么原理  如何快速生成可下载的建站源码工具?  夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化  企业网站制作这些问题要关注  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法  PHP 500报错的快速解决方法  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  如何在建站宝盒中设置产品搜索功能?  如何用低价快速搭建高质量网站?  使用C语言编写圣诞表白程序  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  Linux网络带宽限制_tc配置实践解析【教程】  东莞市网站制作公司有哪些,东莞找工作用什么网站好?