2014-09-23 14 views
5

Làm thế nào sẽ Tôi sử dụng xây dựng truy vấn trong Laravel để tạo ra các câu lệnh SQL sau:Làm thế nào để sử dụng xây dựng truy vấn với tổng cột() và groupby

SELECT costType, sum(amountCost) AS amountCost 
FROM `itemcosts` 
WHERE itemid=2 
GROUP BY costType 

Tôi đã thử một vài điều, nhưng tôi không thể có được sum() cột để làm việc với một tên đổi tên.

mã mới nhất của tôi:

$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(); 

Trả lời

10

Sử dụng groupBy và chức năng tổng hợp (sum/count vv) không có ý nghĩa.

Tổng hợp của Trình xây dựng truy vấn trả lại kết quả duy nhất, luôn luôn.

Điều đó nói rằng, bạn muốn raw chọn cho việc này:

return \DB::table('itemcosts') 
    ->selectRaw('costType, sum(amountCost) as sum') 
    ->where('itemid', $id) 
    ->groupBy('costType') 
    ->lists('sum', 'costType'); 

Sử dụng lists thay vì get là thích hợp hơn ở đây, nó sẽ trở lại mảng như thế này:

[ 
'costType1' => 'sumForCostType1', 
'costType2' => 'sumForCostType2', 
... 
] 

Với get bạn sẽ phải :

[ 
stdObject => { 
    $costType => 'type1', 
    $sum => 'value1' 
}, 
... 
] 
Các vấn đề liên quan