首页  >  文章  >  数据库  >  当时间戳变化时,如何按天对 Laravel Eloquent 结果进行分组?

当时间戳变化时,如何按天对 Laravel Eloquent 结果进行分组?

DDD
DDD原创
2024-10-27 07:46:02416浏览

How do I group Laravel Eloquent results by days when timestamps vary?

按天对 Laravel Eloquent 结果进行分组

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn