我有两个表发票和invoice_items。我想要的是将每个发票ID的金额相加并显示在我的视图中。
发票表
invoice_items表
id
发票编号
金额
我想对特定发票ID的金额栏求和。我是laravel的新手,所以如何以laravel雄辩的方式做到这一点。
答案 0 :(得分:2)
因为您正在使用一对多。
您可以使用with
和groupBy
如下:
$invoice = Invoice::with(['invoice_items' => function($query){
$query->groupBy('invoice_id')->select('invoice_id', DB::raw('SUM(amount) AS amount_sum'));
}])->get();
或者您可以使用leftjoin
和SUM
如下所示:
$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();
使用访问者: 在您的发票模型中:
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.