【问题标题】:How to take sum of column with join from relationship table?如何从关系表中获取带有连接的列的总和?
【发布时间】:2021-04-26 17:10:47
【问题描述】:

我正在尝试获取表格费用中的列收入总和。收费表与寄售有belongsTo 关系,寄售与收费有hasMany 关系。现在的情况是我正在尝试获取invoice_id 为 63 的收入列的总和。

这是我的努力。

Consignment::where('invoice_id', 63)->join('charges', 'charges.object_id', '=', 'consignments.id')
            ->where('charges.model', '=', 'Consignment')
            ->groupBy('consignments.id')
            ->get(['consignments.id', DB::raw('sum(charges.income) as income')])
            ->sum('income');

我不知道有什么问题。

【问题讨论】:

  • 你能写一个原始查询来做你想做的事吗?
  • select sum(income) from charges inner join consignment consignments.id == charges.id where invoice_id == 63 where model == 'Consignment' 对不起,如果我在语法上做错了
  • 您的问题解决了吗?

标签: mysql laravel eloquent laravel-8


【解决方案1】:

可以在$result中获取查询结果并使用。

collect($result)->pluck('income')->sum()

【讨论】:

    【解决方案2】:

    使用关系更容易。试试这个:

    $sum = Charge::query()->whereHas('consignment', function ($query) {
        $query->where('invoice_id', 63);
    })->sum('income');
    

    【讨论】:

    • 如果有100000个货物有查询需要很长时间
    • @Bilalarshad 不,这是一个查询构建器语句,它与查询中的连接没有什么不同。实际上它是一个连接。 sum() 方法也是如此,这里是在查询生成器中,所以就像在做 DB::raw('sum(charges.income)')
    • @Bilalarshad 它与您在问题的评论部分中所写的内容逐字对应。您可以通过将sum('income')select(DB::raw('sum(charges.income)'))->toSql() 切换来检查,并检查将要执行的查询。
    猜你喜欢
    • 1970-01-01
    • 2012-10-21
    • 1970-01-01
    • 2023-04-07
    • 2020-04-25
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多