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 文档中的Fluent Query Builder部分。

于 2012-11-05T11:44:48.273 回答