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

使用Laravel Query Builder实现多列求和:查询指定客户关联订单的包裹统计值

实现方案

前置关联说明

基于你提供的表结构,预设三张表的关联逻辑如下:

  • 客户表与订单表通过「客户ID」字段关联
  • 订单表与包裹表通过「订单ID」字段关联
  • 客户名称字段用于筛选客户为A的过滤条件

Laravel Query Builder 实现代码

直接通过联表+聚合函数实现多字段同时求和:

use Illuminate\Support\Facades\DB;

$statistics = DB::table('customers')
    // 关联客户对应的订单
    ->join('orders', 'customers.id', '=', 'orders.customer_id')
    // 关联订单对应的包裹
    ->join('parcels', 'orders.id', '=', 'parcels.order_id')
    // 筛选客户为A
    ->where('customers.customer_name', 'A')
    // 同时对两个字段求和
    ->selectRaw(
        'SUM(Total_Parcel_Value) as total_parcel_value, 
        SUM(Total_Parcel_Delivery) as total_parcel_delivery'
    )
    ->first();

取值方式

求和结果可直接通过返回对象获取:

  • 所有包裹总价值:$statistics->total_parcel_value
  • 所有包裹总配送费用:$statistics->total_parcel_delivery

简化写法(已知客户ID的场景)

如果你已经提前拿到了客户A对应的ID,可以省去关联客户表的步骤,执行效率更高:

use Illuminate\Support\Facades\DB;

// 假设客户A的ID为1
$statistics = DB::table('orders')
    ->join('parcels', 'orders.id', '=', 'parcels.order_id')
    ->where('orders.customer_id', 1)
    ->selectRaw(
        'SUM(Total_Parcel_Value) as total_parcel_value, 
        SUM(Total_Parcel_Delivery) as total_parcel_delivery'
    )
    ->first();

注意:如果存在订单没有对应包裹的场景,可以将join替换为leftJoin,无包裹的订单对应求和结果会返回0,不会漏掉对应订单。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:27:05