如何使用Laravel Eloquent获取“select count(*) group by”?

19
我希望使用Laravel Eloquent执行以下语句。
SELECT *, count(*) FROM reserves  group by day

我唯一想到的解决办法是在数据库中创建一个视图,但我很确定有一种 Laravel 的方式可以实现。

3个回答

32

你可以使用这个:

$reserves = DB::table('reserves')->selectRaw('*, count(*)')->groupBy('day');

1
他为什么能使用这个,这个为什么对他有效? - Fernando Torres

5

我假设您已经拥有一个名为Reserve的模型,因为您希望使用Laravel Eloquent进行操作。在这种情况下,您可以使用以下代码:

$reserve = Reserve::all()->groupBy('day')->count();

6
如果有一千万条记录会怎样? - Okneloper
23
为了确保每个人都知道:这是一个可用的解决方案,但在选择后分组是在php中进行的,如果在sql语句中分组会更快。 - ya-cha
@Okneloper 分页可能 - benzo

4
您可以使用以下方法:
#Laravel Raw Expressions

  $reserves = DB::table('reserves')
                       ->select(DB::raw('count(*) as reserves_count'))           
                       ->groupBy('day')
                       ->get();

OR

  $reserves = Reserve::select(['reserves.*'])
                       ->groupBy('day')
                       ->count();

更多信息可以在此处阅读。


1
你能进一步解释一下你的答案吗?这将对提问者更有帮助。 - SirPeople

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接