2013-05-26 4 views
6

La funzione with può essere utilizzata con una clausola GroupBy in Laravel Eloquent? Serve a qualcosa se ho elementi specifici da selezionare usando la clausola Select?La funzione with può essere utilizzata con una clausola GroupBy in Laravel Eloquent?

seguente è la query che ho attualmente

Order::with('Campaign') 
      ->where('isapproved','=','Y') 
      ->groupBy('campaign_id') 
      ->orderBy(DB::raw('COUNT(id)','desc')) 
      ->get(array(DB::raw('COUNT(id) as totalsales'))); 

La tabella order ha un nome di colonna campaign_id che belongsTo la tabella denominata campaigns. Vorrei ottenere il conteggio totale delle vendite dalla tabella degli ordini rispetto a ciascuna campagna e è necessario che venga mostrato nel modo seguente.

Total Sales  Campaign 
------------------------- 
    200   Campaign1 
    500   Campaign2 
    300   Campaign3 

Devo eseguire una selezione specifica o posso accedere ai valori della tabella Campaign dalla query precedente?

risposta

7

Se la colonna di riferimento richiesta dal Modello specificato nella funzione Con viene recuperata nella clausola SELECT, la query With viene presa in considerazione dalla query sopra riportata. La query rettificato sarà

$groupedSalesCampaign = Order::with('Campaign') 
      ->where('isapproved','=','Y') 
      ->groupBy('campaign_id') 
      ->orderBy(DB::raw('COUNT(id)','desc')) 
      ->get(array(DB::raw('COUNT(id) as totalsales'),'campaign_id')); 

In questo modo le informazioni sulla campagna possono essere recuperate utilizzando

foreach($groupedSalesCampaign as $campaign) 
{ 
     Log::info($campaign->foo->bar); 
} 

cura.