如何使用 Laravel 的流畅查询构建器选择计数?
Posted
技术标签:
【中文标题】如何使用 Laravel 的流畅查询构建器选择计数?【英文标题】:How to select count with Laravel's fluent query builder? 【发布时间】:2012-10-24 18:45:19 【问题描述】:这是我使用 fluent 查询生成器的查询。
$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 查询,但如果可能的话,我想避免这种情况。任何帮助将不胜感激,在此先感谢!
【问题讨论】:
【参考方案1】:您可以在 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();
【讨论】:
在现代 Laravel 中,您可以使用selectRaw
并传入 SQL 选择器字符串,例如 ->selectRaw('issues.*, COUNT(issue_subscriptions.issue_id) as followers')
: laravel.com/docs/8.x/queries#selectraw【参考方案2】:
$count = DB::table('category_issue')->count();
会给你项目的数量。
有关更多详细信息,请查看beautiful Laravel Documentation 中的 Fluent Query Builder 部分。
【讨论】:
啊,是的,我知道这一点。除了,我希望在类似于我发布的原始续集的单个查询中完成。这种方法需要我遍历我的数据并对每一行进行计数(每行的计数可以并且将会不同)。还有其他想法吗?感谢您的帮助! 如何访问计数?$count[0]->count
?
@Silver89 就像这样:echo $count.以上是关于如何使用 Laravel 的流畅查询构建器选择计数?的主要内容,如果未能解决你的问题,请参考以下文章