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

如何在Laravel 5.8查询构建器中添加支付类型判断的if..else条件

解决方案

你可以通过Laravel查询构造器的DB::raw()方法结合SQL的CASE WHEN语句来添加这个条件判断列,同时修正原查询中潜在的条件优先级问题,具体修改如下:

public static function getAllData()
{
    $records = DB::table('orders as t1')
        ->leftjoin('payments as t2', 't1.ord_id', '=', 't2.pay_ord_id')
        ->leftjoin('members as t3', 't2.pay_creator_id', '=', 't3.mbr_usr_id')
        ->where('t2.pay_confirm', 1)
        ->where(function ($query) {
            $query->where('t1.ord_status','completed')
                  ->orWhere('t1.ord_status','processing');
        })
        ->select(
            't1.ord_id',
            't1.ord_date',
            't1.ord_total',
            't3.mbr_mobile',
            't3.mbr_name',
            't3.mbr_family',
            DB::raw("CASE WHEN t2.pay_type_id = 189 THEN 'Paid With Wallet' ELSE 'Paid Online' END as payment_type")
        )
        ->get(); 
    return $records;
}

关键说明:

  1. 添加支付类型列:通过DB::raw()嵌入SQL的CASE WHEN逻辑,判断t2.pay_type_id的值,生成名为payment_type的自定义列,完全匹配你需要的显示规则。
  2. 修正条件优先级:原代码中where('t2.pay_confirm', 1)后直接跟where+orWhere会导致逻辑错误,用闭包包裹ord_status的两个条件,确保只有t2.pay_confirm = 1且订单状态为completed或processing的记录才会被筛选。

如果偏好更简洁的写法,也可以用selectRaw()替换select()+DB::raw()的组合:

->selectRaw("t1.ord_id, t1.ord_date, t1.ord_total, t3.mbr_mobile, t3.mbr_name, t3.mbr_family, CASE WHEN t2.pay_type_id = 189 THEN 'Paid With Wallet' ELSE 'Paid Online' END as payment_type")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 23:01:05