70

これが流暢なクエリビルダーを使用した私のクエリです。

    $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クエリを使用できることは承知していますが、可能であれば避けたいと思います。事前に感謝します。

4

2 に答える 2

126

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();
于 2012-11-30T02:29:30.870 に答える
44
$count = DB::table('category_issue')->count();

品数を出します。

詳細については、美しい Laravel DocumentationのFluent Query Builderセクションを確認してください。

于 2012-11-05T11:44:48.273 に答える