2017-10-05 376 views
1

我正在使用Laravel爲管理員儀表板構建一些分析統計圖。我玩得很開心。儘管我在理解如何利用SQL查詢和GroupBy函數來實現某些東西方面存在一些困難。Count&GroupBy函數Laravel

最終目標:retreive的用戶誰創建和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(); 

我收到的補鍋匠的錯誤(這是我目前做的大部分我的測試中它是這樣的:

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

回答

0

嘗試在你的小組使用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(); 
+0

或者使用'orderByRaw'和'groupByRaw' :) – fubar

+1

這個工作完美,因爲我按照Laravel的默認值將我的created_at作爲Carbon實例存儲。我非常感謝幫助! –

0

嘗試以下操作:

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

注意在WEEK SQL函數使用的mode選項。這表示每週新星期的哪一天開始。我已經在我的例子週一去了,但你可以找到其他選項here