2014-09-23 12 views
5

sum() Come direbbe che uso generatore di query in laravel per generare la seguente istruzione SQL:Come usare generatore di query con colonna e groupBy

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

Ho provato diverse cose, ma non riesco a ottenere il sum() colonna per lavorare con un rinominare.

Il mio ultimo codice:

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

risposta

10

Utilizzando groupBy e funzione di aggregazione (sum/count ecc) che non ha senso.

Gli aggregati del Query Builder restituiscono il risultato singolo, sempre.

Detto questo, si vuole raw selezionare per questo:

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

utilizzando lists invece di get è più appropriato qui, ritornerà serie in questo modo:

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

Con get si avrebbe :

[ 
stdObject => { 
    $costType => 'type1', 
    $sum => 'value1' 
}, 
... 
] 
Problemi correlati