【发布时间】:2017-08-06 23:24:46
【问题描述】:
我试图在 Laravel 中按周过滤过去 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 个基于 1 整年数据的结果(因为我使用的是 WEEK)。但我需要过去 4 个月的大约 17 个结果。
我可以通过收集每一天然后添加过去 4 个月的 7 天数据作为块来实现这一点,但是我如何仅使用查询来做到这一点?
谢谢。
【问题讨论】:
-
您的代码应该没问题,它将返回 4 个月前的数据。我测试您的查询并返回预期结果。你能在你的例子中提供你的返回数组吗?你的
p_date_time是date还是timestamp在你的数据库中的格式? -
@martiendt,目前 p_date_time 是日期,它成功地为我的其他查询返回数据。这是我得到的数据: [{"week":1,"count":1},{"week":2,"count":1},{"week":3,"count":12} ,{"week":8,"count":14},{"week":9,"count":274},{"week":46,"count":2},{"week":47, "count":2},{"week":48,"count":1},{"week":49,"count":3},{"week":50,"count":3},{ "week":51,"count":2},{"week":52,"count":3}] 我在这里也很困惑。通常 WEEK 返回过去 1 年的数据。但是我通过 Carbon::now()->subMonth(4) 设置了 4 个月的时间限制。那么它如何返回超过 17 周的数据呢?
-
hmm,我认为需要更多调试,尝试删除
DB::raw('WEEK(p_date_time) AS week'),以便我们可以清楚地看到您选择的日期
标签: php mysql laravel laravel-5.4 laravel-eloquent