2012-11-04 71 views
40

這是我的查詢使用流利的查詢生成器。如何使用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(); 

正如您所看到的,我按照來自連接表的計數進行排序。這工作正常。但是,我希望這個計數與我的選擇一起返回。

這是我的原始續集查詢,工作正常。

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 

如何使用Laravel的流利的查詢生成器來進行此選擇?我知道我可以使用原始的sql查詢,但我希望儘可能避免這種情況。任何幫助將不勝感激,在此先感謝!

回答

72

你可以在select()中使用一個數組來定義更多的列,並且可以使用DB :: raw()將其別名給跟隨者。應該看起來像這樣:

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

會給你的項目數。

欲瞭解更多詳細信息,請查詢Fluent查詢生成器部分beautiful Laravel Documentation

+0

ahh是的,我意識到這一點。除此之外,我希望能夠通過類似於我發佈的原始續集的單個查詢來完成此操作。這種方法要求我循環訪問數據併爲每行計數(每行的數量可以不同)。任何其他想法?謝謝您的幫助! –

+0

鏈接不再工作:( – Damon

+1

謝謝@Damon我已更新鏈接 –

相關問題