首页 > 解决方案 > 我如何计算laravel中特定id的总金额?

问题描述

我有两张表 invoices 和 invoice_items。我想要的是汇总每个发票 ID 的金额并显示在我的视图中。

发票表

invoice_items 表

我想对特定发票 ID 的金额列求和。我是 laravel 的新手,所以我如何用 laravel eloquent 做到这一点。

标签: phplaravel

解决方案


因为您使用的是一对多。

解决方案1:

您可以使用withgroupBy看起来像这样:

$invoice = Invoice::with(['invoice_items' => function($query){
       $query->groupBy('invoice_id')->select('invoice_id', DB::raw('SUM(amount) AS amount_sum'));
}])->get();

解决方案2:

或者您可以使用leftjoinSUM看起来像这样:

$invoice_query = InvoiceItem::groupBy('invoice_id')->select("invoice_id", DB::raw('SUM(amount) AS amount_sum'));

Invoice::leftjoin(DB::raw("({$invoice_query->toSql()}) AS ii"), 'ii.invoice_id', '=', 'invoices.id')
       ->mergeBindings($invoice_query->getQuery())
       ->select('invoices.*', 'amount_sum')
       ->get();

解决方案3:

使用访问器:在您的发票模型中:

protected $appends = ['amount_sum'];
public function getAmountSumAttribute()
{
    return $this->invoice_items()->where('invoice_id', $this->id)->sum('amount');
}

所以你可以得到金额的总和:

Invoice::all()->toJSON();

推荐阅读