在 Laravel 中,查询数据库时,您可能会遇到需要按天而不是时间戳对结果进行分组的情况。以下是针对此特定场景的详细问题和解答:
我有一个名为 page_views 的表,其中存储页面访问记录以及时间戳、用户 IP 地址和页面 ID 。尽管使用了 groupBy 方法,但由于时间戳内的秒数差异,查询无法正确按天对数据进行分组。
我希望根据每天的视图获取结果,这应该类似于:
date views ==== ===== 10-11-2013 15 10-12 2013 45 ... ...
任何人都可以提供见解或解决方案吗?
为了有效地按天对结果进行分组,答案建议利用 MySQL 的 DATE() 函数,该函数从 DateTime 中提取日期部分value:
DB::table('page_views') ->select(DB::raw('DATE(created_at) as date'), DB::raw('count(*) as views')) ->groupBy('date') ->get();
但是,这种原始查询方法偏离了 Eloquent 的查询构建器语法。对于更面向 Eloquent 的解决方案,答案如下:
$visitorTraffic = PageView::where('created_at', '>=', \Carbon\Carbon::now->subMonth()) ->groupBy('date') ->orderBy('date', 'DESC') ->get(array( DB::raw('Date(created_at) as date'), DB::raw('COUNT(*) as "views"') ));
此查询利用初始 where 子句中的 Carbon 日期进行比较,并在 get 方法中应用适当的 DB 原始表达式来检索日期和观看次数。
以上是当时间戳变化时,如何按天对 Laravel Eloquent 结果进行分组?的详细内容。更多信息请关注PHP中文网其他相关文章!