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

21次阅读

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

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

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

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

蓝心千询

蓝心千询是 vivo 推出的一个多功能 AI 智能助手

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

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

语法类似:

$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 嵌套,提升可读性。

站长
版权声明:本站原创文章,由 站长 2025-11-12发表,共计1228字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
1a44ec70fbfb7ca70432d56d3e5ef742
text=ZqhQzanResources