当前位置: 首页 > 知识库问答 >
问题:

如何计算laravel中特定id的总额?

百里嘉泽
2023-03-14

我有两张表发票和invoice_items。我想要的是和金额为每个发票id和显示在我的看法。

发票表

  • id

invoice_items表

>

  • id

    发票号

    数量

    我想为具体的发票id求和金额列。我对laravel是新来的,所以我如何使用laravel eloquent做到这一点。

  • 共有3个答案

    闾丘正志
    2023-03-14
    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.
    
    马业
    2023-03-14

    假设在您的发票模型中有这样的关系。

    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'));
    
    袁鸿达
    2023-03-14

    因为你使用的是一对多。

    您可以将groupBy一起使用,如下所示:

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

    或者您可以使用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();
    

    在发票模型中使用存取器:

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

    因此,您可以得到金额的总和:

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

     类似资料:
    • 问题内容: 我正在尝试生成特定计算机唯一的ID。该ID不会随机生成。这将基于计算,以便为计算机A生成的ID将是固定的,并且对于计算机A是唯一的。每次在计算机A上执行程序时,它将继续生成相同的ID,并且在另一台计算机上执行时,它将生成该计算机唯一的另一个ID。这是为了确保两台​​计算机没有相同的ID。 我的挑战: 为了使我的程序能够生成计算机唯一的ID,它需要基于执行该计算机的计算机唯一的种子来执行

    • 我有一个数据文件如下例,但大得多 我必须计算Y1和Y2的每个3个相同名称(第一列)的平均值。然后分别用Y1和Y2的每个名称的平均值制作一个条形图。因此,在x轴上,我将有名称,在y轴上将有平均值。任何人都可以帮我吗?

    • 每个代理都有一个私有布尔变量“Happy?”。如何用[Happy?=True]计算特工人数? 就餐时有没有直接的方法?或者我遍历了所有的代理,然后逐个计算? 更新: 我尝试过全局调度方法:https://repast.github.io/docs/RepastReference/RepastReference.html#schedule-全球的 当我使用ContextBuilder中的@schdu

    • 问题内容: 我想选择总计为特定值的行。 我的SQL(SQL Fiddle): 它应该计算总和为410000并获取行。同时它应该得到这样的东西: 如您所见,42552 + 367225 =409777。它选择了两行,总行数接近410000。 我已经尝试了一切,但是没有用:( 对不起,我的语言,我是德语。 问题答案: 您可以使用相关子查询来获取运行总计,并检索其运行总计小于指定数量的行。(请注意,我将

    • 我想知道如何计算的累计总和在AnyLogic中。具体地说,我有一个循环事件,每周改变一个参数的值。从这个参数我想计算它收到的值的累计总和,我怎么做呢? 该事件是循环模式的超时。操作是: "name_parameter"=圆形(max(正常(10,200),0));

    • 本文向大家介绍如何计算C#枚举中定义的项目总数?,包括了如何计算C#枚举中定义的项目总数?的使用技巧和注意事项,需要的朋友参考一下 枚举是一种特殊的“类”,代表一组常量(不可更改/只读变量)。 要创建枚举,请使用enum关键字(而不是类或接口),并用逗号分隔枚举项- 默认情况下,枚举的第一项的值为0。第二项的值为1,依此类推。 要从项目中获取整数值,必须将项目显式转换为int 您还可以分配自己的枚