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

Laravel Eloquent比较两列不生效,whereRaw却正常,求原因

问题原因及解决方法
  • 核心问题:普通where方法的第三个参数会被当作字面量值解析,而非数据库字段名
    你写的where('qty_reserve','!=','qty_in_pick_up'),实际生成的SQL是:

    SELECT * FROM customer_order_lines WHERE qty_reserve != 'qty_in_pick_up'
    

    数据库会把字符串'qty_in_pick_up'转换为数字0,你的qty_reserve值是4,4≠0,所以这条数据被错误筛选出来。

  • 为什么whereRaw能正常工作?
    whereRaw会直接把传入的字符串作为SQL片段拼接,生成的SQL是:

    SELECT * FROM customer_order_lines WHERE qty_in_pick_up != qty_reserve
    

    这才是正确的字段与字段之间的比较逻辑。

  • 更规范的替代写法:使用whereColumn
    Laravel提供了专门用于字段间比较的whereColumn方法,比whereRaw更安全(规避SQL注入风险),写法如下:

    $lines = CustomerOrderLine::whereColumn('qty_reserve', '!=', 'qty_in_pick_up')->get();
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 17:07:12