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

如何使用查询构造器(Query Builder)实现orders表的多条件筛选查询

问题原因

  • 你使用的MySQL IF() 函数缺少第三个参数(条件不成立时的返回值),语法不完整
  • 你把payu、confirmed这类字符串常量用反引号包裹了,MySQL会将其识别为字段名而非字符串值,导致判断逻辑完全失效
  • 没有覆盖paymode为cod时的判断逻辑

方案1:修正whereRaw写法

直接修正SQL语法和字符串包裹方式即可:

$orders = Order::whereHas('products', function (Builder $query) use ($seller) {
    $query->where('seller_id', $seller->id);
})
->whereRaw('IF(paymode = "payu", pay_status = "confirmed", pay_status = "unconfirmed")')
// 如果需要排除其他支付方式的订单,可取消下面一行的注释
// ->whereIn('paymode', ['payu', 'cod'])
->paginate(25);

方案2:使用Laravel查询构造器(更推荐)

无需编写原生SQL,可读性和安全性更高,框架会自动处理语法和转义问题:

$orders = Order::whereHas('products', function (Builder $query) use ($seller) {
    $query->where('seller_id', $seller->id);
})
->where(function ($query) {
    $query->where('paymode', 'payu')
          ->where('pay_status', 'confirmed');
})
->orWhere(function ($query) {
    $query->where('paymode', 'cod')
          ->where('pay_status', 'unconfirmed');
})
// 如果需要排除其他支付方式的订单,可取消下面一行的注释
// ->whereIn('paymode', ['payu', 'cod'])
->paginate(25);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 08:06:03