首页 > 解决方案 > 在 Laravel 中按类别计算总金额

问题描述

我做这个查询:

$expenses = Expense::where('team_id', Auth::user()->currentTeam->id)
            ->with(['categories'])
            ->orderBy('entry_date', 'DESC')
            ->get();

ExpenseSumByCategoryResource :

return [
            'id'         => Hashids::encode($this->id),
            'entry_date' => $this->entry_date,
            'amount'     => $this->amount,
            'category' => $this->category->name
 ];

回复 :

"expenses": [
        {
            "id": "GO3W1MkgWkngpnByQ6",
            "entry_date": "2020-10-14",
            "amount": "50.00",
            "category": "Health"
        },
        {
            "id": "7vK6bz0gnG7JBOYRLD",
            "entry_date": "2020-10-14",
            "amount": "30.00",
            "category": "Uncategorize"
        },
        {
            "id": "7vK6bz0gnG7JBOYRLD",
            "entry_date": "2020-10-14",
            "amount": "30.00",
            "category": "Health"
        },
        {
            "id": "7vK6bz0gnG7JBOYRLD",
            "entry_date": "2020-10-14",
            "amount": "30.00",
            "category": "Food"
        },
    ]

我想按类别计算“金额”的总和。

理想情况下,我希望得到这样的结果:

"expenses": [
        {
            "category": "Health"
            "total_amount": "80.00",
        },
        {
            "category": "Uncategorized"
            "total_amount": "30.00",
        },
        {
            "category": "Food"
            "total_amount": "30.00",
        },
    ]

标签: phplaraveleloquent

解决方案


您可以尝试添加一个select()groupBy()这对您的查询有意义:

$expenses = Expense::select('category', DB::raw('SUM(amount) AS total_amount'))
    ->where('team_id', Auth::user()->currentTeam->id)
    ->groupBy('category')
    ->with(['categories'])
    ->orderBy('category')
    ->get();

推荐阅读