如何在Laravel查询构建器中仅当变量非空时使用where条件
解决方案
在Laravel中,你可以通过两种简洁的方式实现仅当$last_name非空时才添加对应的WHERE子句的需求:
方法一:使用查询构建器的when()方法(推荐)
when()是Laravel专门为条件查询设计的方法,会自动根据传入的条件判断是否执行后续的查询逻辑:
$first_name = $request->first_name; $last_name = $request->last_name; $customers = Customer::where('first_name', '=', $first_name) ->when($last_name, function ($query) use ($last_name) { return $query->where('last_name', '=', $last_name); }) ->get();
- 第一个参数
$last_name会被自动判断:空字符串、null、false都会被视为不满足条件,此时不会添加last_name的查询子句。 - 若需要更严格的非空判断(比如排除仅含空格的字符串),可以把条件改为
trim($last_name) !== ''。
方法二:传统条件判断写法
如果更习惯原生的条件逻辑,也可以手动链式调用查询构建器:
$first_name = $request->first_name; $last_name = $request->last_name; // 先初始化基础查询 $query = Customer::where('first_name', '=', $first_name); // 仅当$last_name非空时添加查询条件 if ($last_name) { $query->where('last_name', '=', $last_name); } // 执行查询 $customers = $query->get();
内容的提问来源于stack exchange,提问作者Naz
相关产品推荐
相关产品推荐

