如何在sum()列和groupBy中使用查询生成器

时间:2014-09-23 19:39:30

标签: php laravel-4

如何在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();

1 个答案:

答案 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'
 },
 ...
]