如何计算Laravel中特定ID的总金额?

时间:2020-01-29 06:21:45

标签: php laravel

我有两个表发票和invoice_items。我想要的是将每个发票ID的金额相加并显示在我的视图中。

发票表

  • id

invoice_items表

  • id

  • 发票编号

  • 金额

我想对特定发票ID的金额栏求和。我是laravel的新手,所以如何以laravel雄辩的方式做到这一点。

3 个答案:

答案 0 :(得分:2)

因为您正在使用一对多。

解决方案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();

答案 1 :(得分:0)

假设您的帐单模型与此相关。

public function invoice_items() [
   return $this->hasMany('App\Invoice_Items', 'invoice_id');
}

在您的控制器中,您的代码应如下所示。

获取所有发票及其发票项目总额

$invoices = Invoice::with(['invoice_items' => function($query){
   $query->sum('amount');
}])->get();

return view('invoice', compact('invoices'));

获取包含发票项目总额的特定发票

$invoice = Invoice::with(['invoice_items' => function($query){
       $query->sum('amount');
}])->find($invoice_id);

return view('invoice', compact('invoices'));

答案 2 :(得分:0)

Try with this one. I think this works
$result = \DB::table('Invoice')     
    ->join('invoice_items', 'Invoice.id', 
'=','invoice_items.invoice_id')->whereIn('Invoice.id', [1, 2, 3]))->sum('invoice_items.amount');    

if somewhere i am wrong try with exchanging table name.