在 Laravel 中,查询数据库时,您可能会遇到需要按天而不是时间戳对结果进行分组的情况。以下是针对此特定场景的详细问答:
我有一个名为 page_views 的表,其中存储页面访问记录以及时间戳、用户 IP 地址和页面 ID 。尽管使用 groupBy 方法,但由于时间戳内的秒数差异,查询无法正确按天对数据进行分组。
我希望根据每天的视图获取结果,这应该类似于:
date views ==== ===== 10-11-2013 15 10-12 2013 45 ... ...
任何人都可以提供见解或解决方案吗?
为了有效地按天对结果进行分组,答案建议利用 MySQL 的 DATE() 函数,从 DateTime 值中提取日期部分:
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 方法中应用适当的数据库原始表达式来检索日期和视图计数。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3