2012-11-04 11 views
40

Ecco la mia query utilizzando fluent query builder.Come selezionare il conteggio con il fluent query builder di Laravel?

$query = DB::table('category_issue') 
     ->select('issues.*') 
     ->where('category_id', '=', 1) 
     ->join('issues', 'category_issue.issue_id', '=', 'issues.id') 
     ->left_join('issue_subscriptions', 'issues.id', '=', 'issue_subscriptions.issue_id') 
     ->group_by('issues.id') 
     ->order_by(DB::raw('COUNT(issue_subscriptions.issue_id)'), 'desc') 
     ->get(); 

Come potete vedere, sto ordinando per un conteggio dalla tabella unita. Funziona bene Tuttavia, voglio che questo conteggio venga restituito con le mie selezioni.

Ecco la mia query sequel raw che funziona correttamente.

Select issues.*, COUNT(issue_subscriptions.issue_id) AS followers 
FROM category_issue JOIN Issues ON category_issue.issue_id = issues.id 
LEFT JOIN issue_subscriptions ON issues.id = issue_subscriptions.issue_id 
WHERE category_issue.category_id = 1 
GROUP BY issues.id 
ORDER BY followers DESC 

Come posso fare per questo selezionate utilizzando query builder fluente di laravel? Sono consapevole di poter utilizzare una query sql raw ma vorrei evitarlo se possibile. Qualsiasi aiuto sarebbe apprezzato, grazie in anticipo!

risposta

72

È possibile utilizzare una matrice in select() per definire più colonne e utilizzare DB :: raw() con aliasing per i follower. Dovrebbe assomigliare a questo:

$query = DB::table('category_issue') 
    ->select(array('issues.*', DB::raw('COUNT(issue_subscriptions.issue_id) as followers'))) 
    ->where('category_id', '=', 1) 
    ->join('issues', 'category_issue.issue_id', '=', 'issues.id') 
    ->left_join('issue_subscriptions', 'issues.id', '=', 'issue_subscriptions.issue_id') 
    ->group_by('issues.id') 
    ->order_by('followers', 'desc') 
    ->get(); 
23
$count = DB::table('category_issue')->count(); 

ti darà il numero di articoli.

Per informazioni più dettagliate, consultare la sezione Fluent Query Builder in beautiful Laravel Documentation.

+0

ahh si, lo sapevo. Tranne, speravo di farlo in una singola query simile al sequel crudo che ho postato. Questo approccio mi richiederebbe di scorrere i miei dati e contarli per ogni riga (il conteggio di ogni riga può e sarà diverso). Altre idee? Grazie per l'aiuto! –

+0

Link non funziona più :( – Damon

+1

Grazie @Damon Ho aggiornato il collegamento –

Problemi correlati