如何使用Laravel的流畅查询构建器选择计数?

Ale*_*spo 55 mysql activerecord fluent laravel eloquent

这是我使用流畅查询构建器的查询.

    $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();
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我通过连接表中的计数进行排序.这工作正常.但是,我希望这个计数随我的选择而返回.

这是我的原始续集查询,工作正常.

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
Run Code Online (Sandbox Code Playgroud)

如何使用Laravel的流畅查询构建器进行此选择?我知道我可以使用原始的SQL查询但我想尽可能避免这种情况.任何帮助将不胜感激,提前谢谢!

小智 101

您可以在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();
Run Code Online (Sandbox Code Playgroud)

  • 在现代 Laravel 中,您可以使用“selectRaw”并传入 SQL 选择器字符串,例如“->selectRaw('issues.*, COUNT(issue_subscriptions.issue_id) as follower')”:https://laravel.com/docs /8.x/queries#selectraw (3认同)

Sin*_*dem 35

$count = DB::table('category_issue')->count();
Run Code Online (Sandbox Code Playgroud)

会给你一些物品.

有关更多详细信息,请参阅漂亮的Laravel文档中的Fluent Query Builder部分.

  • @Silver89 就像这样:echo $count。 (2认同)