【问题标题】:Count & GroupBy Function LaravelCount & GroupBy 函数 Laravel
【发布时间】:2018-03-17 16:20:25
【问题描述】:

我正在使用 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

【问题讨论】:

    标签: mysql sql laravel count eloquent


    【解决方案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();
    

    【讨论】:

    • 或者使用orderByRawgroupByRaw :)
    • 这非常有效,因为我按照 Laravel 默认将 created_at 存储为 Carbon 实例。非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-12
    • 2018-12-05
    • 2016-10-26
    • 2012-06-24
    • 1970-01-01
    • 2015-06-12
    相关资源
    最近更新 更多