【问题标题】:How do i calculate total amount for specific id in laravel?我如何计算laravel中特定id的总金额?
【发布时间】:2020-05-14 14:53:37
【问题描述】:

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

发票表

  • 身份证

invoice_items 表

  • id

  • invoice_id

  • 金额

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

【问题讨论】:

  • 到目前为止你有什么尝试?
  • 型号::products->sum('id');
  • 你们之间建立关系了吗?你期待什么样的结果?
  • $amount_sum = DB::table('invoice_items')->where('invoice_id', '=', $id)->sum('amount');
  • 我有一对多的关系

标签: php laravel


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

【讨论】:

    【解决方案2】:
    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.
    

    【讨论】:

    • 它给了我所有列的总和。我只想分别合计发票 ID 1 和 2 和 3 的金额并显示在视图中
    • 1、2、3 是静态的。如果我有 100 个 id 怎么办
    • 你也可以放数组。
    【解决方案3】:

    假设在您的 Invoice 模型中有这种关系。

    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'));
    

    【讨论】:

    • 我得到空结果
    猜你喜欢
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 2017-04-19
    相关资源
    最近更新 更多