You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中当where子句参数为null时如何返回列所有记录?无需if else的实现方式

如何在Laravel中避免使用if-else实现条件查询?

当然有更简洁的实现方式!Laravel的查询构建器提供了非常好用的when()方法,能帮你彻底丢掉冗余的if-else判断,让代码更优雅。

核心思路

when()方法的作用是根据条件动态添加查询子句:当第一个参数为“真”时,才执行第二个闭包里的查询逻辑;如果参数为“假”,就直接跳过这个条件分支。完美匹配你需要的“当$loantype为null时不添加loan_type筛选”的需求。

优化后的代码

// 先处理$loantype(也可以直接用$request->input('regloan_type'),Laravel会自动处理null情况)
$loantype = empty($request['regloan_type']) ? null : $request['regloan_type'];

$loans = Loan::select('date_release')
    ->where('invalid', false)
    ->where('transaction_year', $transyear)
    // 只有当$loantype不为null时,才添加loan_type的筛选条件
    ->when($loantype, function ($query) use ($loantype) {
        return $query->where('loan_type', $loantype);
    })
    ->get();

更精准的条件控制(可选)

如果你需要严格判断“仅当$loantype不为null时才筛选”(比如允许$loantype为空字符串的场景),可以把when()的第一个参数改成更明确的判断:

->when(!is_null($loantype), function ($query) use ($loantype) {
    return $query->where('loan_type', $loantype);
})

这样写出来的代码不仅去掉了重复的查询构建逻辑,还更符合Laravel的设计哲学,可读性和维护性都更高。

内容的提问来源于stack exchange,提问作者Eli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 16:29:11