laravel - Laravel groupBy 值并以 groupBy 值为 key 存储另一个值的总和
问题描述
对不起,冗长的标题,我只是不确定如何准确地表达我正在尝试做的事情。
所以我有一张这样的航班表。
id | user_id | orig | dest | value |
=======================================
1 | 1 | LHR | WLG | 34000.00 |
2 | 1 | LHR | WLG | 47000.00 |
3 | 1 | LHR | AKL | 22000.00 |
我想要的是一个目的地数组('dest'
),其中包含该目的地的任何记录的值的总和。
我目前正在使用 Eloquent 来提取记录,然后在 groupBy 上'dest'
$transactions = AirTran::select('orig','dest','value')->where('user_id','1')->get();
$group_tran = $transactions->groupBy('dest');
不幸的是,这将返回数组中的每一行,而不是值的总和:
WLG:
0:
orig: 'LHR'
dest: 'WLG'
value: '34000.00'
1:
orig: 'LHR'
dest: 'WLG'
value: '47000.00'
AKL:
0:
orig: 'LHR'
dest: 'AKL'
value: '22000.00'
但我真正想要的是:
WLG:
0:
orig: 'LHR'
dest: 'WLG'
value: '81000.00'
AKL:
0:
orig: 'LHR'
dest: 'AKL'
value: '22000.00'
'value'
有没有办法使用 Eloquent 而不是使用 PHP来获取列的总和,如下所示:
foreach($transactions as $transaction) {
if(isset($data[$transaction->dest]['revenue'])){
$data[$transaction->dest]['revenue'] += $transaction->value;
} else {
$data[$transaction->dest]['revenue'] = $transaction->value;
}
}
解决方案
您可以使用 eloquant 的函数 sum。您的代码可以是:
$transactions = AirTran::select('orig','dest','value')->where('user_id','1')->get();
$group_tran = $transactions->groupBy('dest') ->sum('value');
或直接使用一个命令:
$group_tran= AirTran::select('orig','dest','value')->where('user_id','1')
->sum('value')
->groupBy('dest')
->where('user_id','1')
->get();
推荐阅读
- node.js - 如何在 Docker 上安装 nodejs?(Windows 容器)
- javascript - 将 html 元素从锚标记传递到 django 视图
- mongodb - MongoDB bindIP 地址有优先顺序吗?
- css - 在 CSS 中堆叠非同级元素
- javascript - 从 WebGL Unity 应用程序中触发 iframe/modal 覆盖?
- javascript - Puppeteer 从输入中获取数据
- visual-c++ - 在 MSVC 中启用 Wsign-compare
- python - 在 django 中按降序首先按空值排序
- java - 为什么可以在java的抽象类中声明瞬态变量?
- reactjs - 如何在子组件中传递泛型类型?