2017-07-17 138 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

是啊,我有,我的其中是确定 – TuxxyDOS

+0

在这一行'DB ::原料('MONTH(date_signalement)一个月)'你已经错过了'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:这将让你从self类,它其实并不Laravel模型......所以也许有DB::table('users')或类似更换self

+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获取一个月.. –