Php 每周获取最近n个月的数据组-Laravel

Php 每周获取最近n个月的数据组-Laravel,php,mysql,laravel,laravel-5.4,laravel-eloquent,Php,Mysql,Laravel,Laravel 5.4,Laravel Eloquent,我试图在拉雷维尔按周筛选过去4个月的数据。这是我目前拥有的代码: $analytics = Data::select([ DB::raw('WEEK(p_date_time) AS week'), DB::raw('COUNT(id) AS count'), ]) ->where('p_id', $p_id) ->where('p_date_time', '

我试图在拉雷维尔按周筛选过去4个月的数据。这是我目前拥有的代码:

$analytics =
        Data::select([
            DB::raw('WEEK(p_date_time) AS week'),
            DB::raw('COUNT(id) AS count'),
        ])
            ->where('p_id', $p_id)
            ->where('p_date_time', '>=', Carbon::now()->subMonth(4))
            ->groupBy('week')
            ->orderBy('week')
            ->get()
            ->toArray();
这段代码根据一整年的数据给了我52个结果(我使用的是WEEK)。但在过去的4个月里,我需要大约17个结果

我可以通过收集每天的数据,然后添加7天的数据作为过去4个月的数据块来实现这一点,但单凭查询怎么做呢


谢谢。

也许只是你的碳查询中的一个输入错误。将子月(4)更改为子月(4)。带“s”

您的代码应该是正常的,它将返回4个月前的数据。我测试您的查询并返回预期结果。您能否在示例中提供返回数组?您的
p_date_time
date
还是
timestamp
格式在您的数据库中?@martiendt,当前p_date_time是date,它成功返回数据供我进行其他查询。这是我得到的数据:[{“周”:1,“计数”:1},{“周”:2,“计数”:1},{“周”:3,“计数”:12},{“周”:8,“计数”:14},{“周”:9,“计数”:274},{“周”:46,“计数”:2},{“周”:47,“计数”:2},{“周”:48,“计数”:1},{“周”:49,“计数”:3},{“周”:50,“计数”:3},{“周”:51,“计数”:2},{“周”:52,“计数”:我也很困惑。通常每周返回上一年的数据。但是我通过Carbon::now()->subMonth(4)设置了4个月的时间限制。那么它是如何返回早于17周的数据的呢?嗯,我认为需要对此进行更多的调试,尝试删除
DB::raw('week(p_date\u time)AS week')
,以便我们可以清楚地看到您选择的日期它返回相同的值,无论我使用子月(4)还是子月(4),