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

Laravel Eloquent中whereBetween传值与null是否可行?如何实现区间至无穷大查询?

关于Eloquent查询价格区间(含无穷大)的问题解答

嘿,我来帮你理清这个问题~首先直接把$to = ""传入查询肯定不可行,原因很简单:空字符串不是null,Eloquent会把它当成普通字符串处理,比如如果你用whereBetween('price', [$from, $to]),最终生成的SQL会是price BETWEEN 10 AND '',数据库会把空字符串解析成0或者其他不符合预期的值,根本查不到你想要的“从10到无穷大”的结果。

那要实现从10到无穷大的搜索,有两种很常用的优雅写法:

方法一:动态判断添加查询条件

这种方式逻辑清晰,适合需要明确控制条件的场景:

// 先初始化查询构造器
$productsQuery = App\Models\Product::query();

// 如果$from有有效值(非空非null),添加>=条件
if ($from !== '' && $from !== null) {
    $productsQuery->where('price', '>=', $from);
}

// 只有$to有有效值时,才添加<=条件;空或null则跳过,自然就是无穷大
if ($to !== '' && $to !== null) {
    $productsQuery->where('price', '<=', $to);
}

// 执行查询
$products = $productsQuery->get();

方法二:使用Eloquent的when()方法简化代码

when()是Eloquent提供的便捷方法,会自动判断参数是否为“真值”(空字符串、null都会被判定为假),代码更简洁:

$products = App\Models\Product::when($from, function ($query) use ($from) {
        // 只有$from为真时才执行这个闭包
        return $query->where('price', '>=', $from);
    })
    ->when($to, function ($query) use ($to) {
        // $to为空或null时,这个闭包不会执行
        return $query->where('price', '<=', $to);
    })
    ->get();

这两种方法都能完美实现你要的“从10到无穷大”的搜索需求,当$to是空字符串或者null时,只会应用price >= 10的条件,也就是所有价格大于等于10的记录都会被查出来。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:28:17