2012-11-04 15 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()を使用してフォロワーにエイリアシングを付けることができます。

23
$count = DB::table('category_issue')->count(); 

あなたにアイテムの数が表示されます。

詳細情報については、フルハントクエリビルダセクションのbeautiful Laravel Documentationを参照してください。

+0

ああ、私はこれを知っていました。それ以外は、私が投稿した生の続編に似た単一のクエリでそれを行うことを望んでいました。このアプローチでは、私のデータをループして各行ごとに数える必要があります(各行の数は異なります)。他のアイデア?助けてくれてありがとう! –

+0

リンクはもはや動作しません:( – Damon

+1

ありがとう@Damonリンクを更新しました –

関連する問題