Laravel 5.4 - 按月统计

时间:2017-07-17 13:10:04

标签: php database laravel

我想计算所有状态为“可见”和“幽灵”的用户:

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`)

感谢您的帮助!

2 个答案:

答案 0 :(得分: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模型,他们实际上并不是......所以可以将self替换为DB::table('users')或者类似

答案 1 :(得分:0)

您可以尝试:

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

如果Month存储在其他表中,请尝试加入查询。