对不起,标题太长了,我只是不确定如何准确表达我要做什么。
所以我有一张这样的航班表。
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提取记录,然后在'dest'
上使用groupBy
$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'
是否有一种方法可以使用Eloquent而不是下面的PHP来获取'value'
列的总和:
foreach($transactions as $transaction) {
if(isset($data[$transaction->dest]['revenue'])){
$data[$transaction->dest]['revenue'] += $transaction->value;
} else {
$data[$transaction->dest]['revenue'] = $transaction->value;
}
}
答案 0 :(得分:0)
您可以使用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();