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

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

上一篇
下一篇
text=ZqhQzanResources