2017-07-17 12 views
0

によって統計の状態を持っているすべてのユーザーをカウントする「可視」と、このような「ゴースト」:Laravel 5.4 - 私は希望ヶ月

public function getStatsUser() { 
     $data = self::whereIn('state', array('Visible', 'Ghost')) 
      ->count(); 

     return $data; 
    } 

しかし、私はから毎月、これらのデータを持っていると思いますこのような最初のユーザー:

['Month', 'Data'], 
['December 2016', 4000], 
['January 2017', 4600], 
['February 2017', 11020], 
['March 2017', 5400] 

日付の場合、私は "created_at"の行を持っていますが、その月の特定の行はありません。

私はこれを試してみましたが、それは

$data= self::select(DB::raw('count(*) as monthly_total'), DB::raw('MONTH(created_at) as month')) 
      ->whereIn('state', array('visible', 'Ghost')) 
      ->whereYear('created_at', '=', date('Y')) 
      ->groupBy('month') 
      ->count(); 

エラーが働いていない:あなたの助けを

SQLSTATE[42S22]: Column not found: 1054 Champ 'month' inconnu dans group statement (SQL: select count(*) as aggregate from `oiseau` where `etat_actuel` in (Relaché, En convalescence) and year(`date_signalement`) = 2017 group by `month`) 

感謝を!

+0

この状態の履歴を保持していますか?ユーザーの現在の状態のみを持っている場合は、これを行うことはできません。 – Jerodev

+0

ええ、私のwhereInが大丈夫です – TuxxyDOS

+0

この行では、DB :: raw( 'MONTH(date_signalement)month') '月前に' as'をお見逃ししました –

答えて

1

これは、あなたが始める必要があります。

self::selectRaw('CONCAT_WS(" ", MONTHNAME(created_at), YEAR(created_at)) as date, COUNT(*) as count') 
    ->whereIn('state', array('visible', 'Ghost')) 
    ->groupBy(DB::raw('YEAR(created_at)', MONTH(created_at))) 
    ->get() 

問合せは、日付と回数でオブジェクトのコレクションを返します。

おそらく、最も重要な部分は、年と月の両方でグループ化することです。生の列ではなく、そこで関数を使用できます。

PS:これはので、多分DB::table('users')または類似してselfを交換...彼らは本当にありませんselfクラスからあなたLaravelモデル取得します。

+0

それは働いています。多くの奇妙なものが内部にあり、その中には日付とカウントの配列があります。 – TuxxyDOS

+0

しかし、今私はそれをどのように使用するか考えていない:/ – TuxxyDOS

0

あなたは次のように試すことができます。

$data = self::whereIn('state', array('Visible', 'Ghost')) 
      ->select(DB::raw('count(*) as monthly_total') , DB::raw('MONTH(created_at) month')) 
      ->groupBy('month ') 
      ->get(); 

や月が他のテーブルに格納されている場合、クエリに参加してみてください。

+0

"月"の行がある、それは "created_at"なので、あなたの答えで何か他のものを試してみましたが、うまくいきません。 – TuxxyDOS

+0

私の編集した答えを確認して、created_atから月を取り出すことができます.. –