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

如何简化Laravel Eloquent的where查询条件?

Laravel 链式条件查询优化(避免分支判断)

在Laravel中,你可以使用查询构造器的when()方法实现无分支的链式条件查询,完美满足你想要的简洁写法:

public function get_users_older_than(int $age = null, string $gender = null) {
    return User::query()
        ->when($age, function ($query) use ($age) {
            return $query->where('age', '>', $age);
        })
        ->when($gender, function ($query) use ($gender) {
            return $query->where('gender', $gender);
        })
        ->get();
}

如果你的PHP版本支持箭头函数(PHP 7.4+),还能进一步简化代码:

public function get_users_older_than(int $age = null, string $gender = null) {
    return User::query()
        ->when($age, fn($query) => $query->where('age', '>', $age))
        ->when($gender, fn($query) => $query->where('gender', $gender))
        ->get();
}

逻辑说明

when()方法的核心逻辑非常清晰:

  • 第一个参数是判断条件(这里即$age或$gender是否非空)
  • 当条件为真时,自动执行第二个参数的闭包,将对应的where条件追加到查询构造器中
  • 全程保持链式调用结构,完全不需要单独的if分支判断,代码更紧凑优雅

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:40:36