如何简化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
相关产品推荐
相关产品推荐

