伯爵& GroupBy功能Laravel

时间:2017-10-05 22:51:31

标签: mysql sql laravel count eloquent

我正在使用Laravel为管理员信息中心构建一些分析统计图表。我有很多乐趣。虽然我很难理解如何利用SQL查询和GroupBy函数来实现一些东西。

结束目标:检索已创建的用户计数,并在他们注册的那一周 groupBy

到目前为止,我使用了这个:

DB::table("users")
   ->select(DB::raw("COUNT(*) as count"))
   ->orderBy("created_at")
   ->groupBy(function ($query)
     {
       return \Carbon\Carbon::parse($query->created_at)->format("W");
     })
   ->get();

我在Tinker中遇到错误(这是我执行大部分测试的地方,此时它是这样的:

PHP warning:  strtolower() expects parameter 1 to be string,  object given in 
/Users/Ian/sites/bangerz-army/vendor/laravel/framework/src/Illuminate/Database/Grammar.php on line 58

我在PHP中遇到了类似的查询,但出于性能原因,我希望尽可能多地保留SQL中的数学。

/ Laravel 5.5

2 个答案:

答案 0 :(得分:1)

尝试使用

组中的DB::raw()
DB::table("users")
   ->select(DB::raw("COUNT(*) as count, WEEK(created_at)"))
   ->orderBy(DB::raw('WEEK(created_at)'))
   ->groupBy(DB::raw('WEEK(created_at)'))
   ->get();

答案 1 :(得分:0)

尝试以下方法:

DB::table('users')
    ->select('WEEK(created_at, 1) AS week, COUNT(*) AS count')
    ->groupBy('week')
    ->orderBy('week', 'ASC')
    ->get();

请注意mode SQL函数中使用的WEEK选项。这表示每个新周开始的一周中的哪一天。在我的例子中,我已经去了星期一,但你可以找到其他选项here