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

Laravel Eloquent如何查询decimal类型字段不等于0的数据

Laravel产品查询逻辑修复方案

原代码问题说明

你当前使用的orWhereRaw('srp != FLOOR(0.00)')写法存在两个问题:

  • 逻辑冗余:FLOOR(0.00)的计算结果固定为0,这段SQL本质是判断srp != 0,完全不需要调用FLOOR函数
  • 不必要的Raw查询:无动态参数传入的场景下使用Raw写法,会降低代码的数据库兼容性,徒增维护成本

正确实现方案

方案1:原生查询写法(推荐)

直接使用Laravel查询构建器的原生where方法即可,框架会自动适配decimal字段类型,可正确识别0.00、0.0等所有精度的0值,替换代码如下:

->orWhere('srp', '!=', 0)

方案2:Raw查询写法(特殊场景使用)

如果业务确实需要使用Raw写法,建议搭配参数绑定避免潜在的SQL注入风险,写法如下:

->orWhereRaw('srp <> ?', [0])

特殊场景补充

如果你的实际需求是筛选srp为非整数的带小数数值(排除所有整数价格,仅保留带小数位的价格),才需要用到FLOOR函数,对应写法为:

->orWhereRaw('srp != FLOOR(srp)')

修复后完整代码

public function render()
{
    $searchTerm = '%' . $this->searchTerm . '%';
    
    $products = Product::where(function($query) use ($searchTerm) {
        return $query->where('code', 'like', $searchTerm)
            ->orWhere('name', 'like', $searchTerm)
            ->orWhere('description', 'like', $searchTerm);
    })
    ->where(function($query) {
        return $query->where('qty_on_hand', '!=', 0)
            ->orWhere('srp', '!=', 0);
    })
    ->orderBy('name')
    ->paginate($this->amount);

    $this->emit('productStore');
    
    return view('livewire.load-in-stock-products', ['products' => $products]);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:21:03