如果对行进行计数,则查询生成器找不到列

时间:2019-12-24 13:13:11

标签: mysql laravel eloquent

我试图查看连续几周有记录并遇到有趣的行为

这有效

    $weeks = $className::where($user_id_column, $user_id)
            ->where('created_at', '>', $period_start)
            ->select(DB::raw('WEEK(created_at) AS weeknumber'))
            ->groupBy('weeknumber')
            ->get();

这会引发错误

$week_count = $className::where($user_id_column, $user_id)
        ->where('created_at', '>', $period_start)
        ->select(DB::raw('WEEK(created_at) AS weeknumber'))
        ->groupBy('weeknumber')
        ->count();

Unknown column 'weeknumber' in 'group statement'

那是为什么?

1 个答案:

答案 0 :(得分:2)

出现此问题的原因是因为count()将用count(*) as aggregate替换select语句。

要达到目标,可以手动添加计数:

$week_count = $className::where($user_id_column, $user_id)
    ->where('created_at', '>', $period_start)
    ->selectRaw('WEEK(created_at) AS weeknumber, COUNT(*)')
    ->groupBy('weeknumber')
    ->get();
相关问题