Laravel 查询生成器对多列求和

Posted

技术标签:

【中文标题】Laravel 查询生成器对多列求和【英文标题】:Laravel Query Builder sum multiple columns 【发布时间】:2021-11-13 00:15:05 【问题描述】:

如图所示,我有三张桌子。

我想运行一个查询,返回:Total_Parcel_Value, Total_Parcel_Delivery of parcels from all orders where customer = A.

【问题讨论】:

【参考方案1】:

假设您的关系设置正确,您可以执行以下查询:

$res = Parcel::query()
    ->whereHas('order', function($q)
        $q->where('customer_id', 12);
    )
    ->selectRaw('SUM(parcel_value) as Total_Parcel_Value, SUM(delivery_fee) as Total_Parcel_Delivery')
    ->first();

$res->Total_Parcel_Value; 
$res->Total_Parcel_Delivery;

【讨论】:

【参考方案2】:

在这里试试这个:

// 客户模型

...

public function orders(): HasMany

   return $this->hasMany(Order::class)


//订单模型

...

public function customer(): BelongsTo

   return $this->belongsTo(Customer::class)


public function parcels(): HasMany

   return $this->hasMany(Parcel::class)


// 地块模型

...

public function order(): BelongsTo

   return $this->belongsTo(Order::class)


查询:


Parcel::selectRaw('SUM(parcel_value)')
  ->selectRaw('SUM(delivery_fee)')
  ->whereHas('order.customer', function(Builder $builder) use ($customerName) 
     $builder->where('customers.name', $customerName)
   )->first()

【讨论】:

以上是关于Laravel 查询生成器对多列求和的主要内容,如果未能解决你的问题,请参考以下文章

对 SQL 中多列中的行计数求和的查询

如何对sql查询引用组中的多列求和

对集合多列进行求和方法的选择

如何在 SQL 中对多列求和

如何将数组作为 Laravel 查询生成器的 SELECT 参数传递

如何使用 laravel 查询生成器从表联合的结果中选择列?