如何在Laravel中使用查询构建器生成以下SQL语句:
SELECT costType, sum(amountCost) AS amountCost
FROM `itemcosts`
WHERE itemid=2
GROUP BY costType
我尝试了几项,但我无法让sum()
列与重命名一起使用。
我的最新代码:
$query = \DB::table('itemcosts');
$query->select(array('itemcosts.costType'));
$query->sum('itemcosts.amountCost');
$query->where('itemcosts.itemid', $id);
$query->groupBy('itemcosts.costType');
return $query->get();
答案 0 :(得分:17)
使用groupBy
和汇总功能(sum
/ count
等)没有意义。
查询构建器的聚合始终返回单个结果。
那就是说,你想要raw
选择这个:
return \DB::table('itemcosts')
->selectRaw('costType, sum(amountCost) as sum')
->where('itemid', $id)
->groupBy('costType')
->lists('sum', 'costType');
在这里使用lists
代替get
更合适,它将返回如下数组:
[
'costType1' => 'sumForCostType1',
'costType2' => 'sumForCostType2',
...
]
使用get
,您将拥有:
[
stdObject => {
$costType => 'type1',
$sum => 'value1'
},
...
]