首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Laravel Eloquent获取按天分组的结果

Laravel Eloquent获取按天分组的结果
EN

Stack Overflow用户
提问于 2013-12-16 11:40:46
回答 15查看 124.8K关注 0票数 58

我目前有一个page_views表,每次访问者访问页面时记录一行,记录用户的ip/id和页面本身的id。我需要补充的是,created_at列的类型是: timestamp,因此它包含小时/分钟/秒。当我尝试groupBy查询时,由于秒数的差异,它不会将相同的日期组合在一起。

代码语言:javascript
复制
created_at         page_id       user_id
==========         =======       =======
10-11-2013            3            1
10-12 2013            5            5
10-13 2013            5            2
10-13 2013            3            4
  ...                ...          ...

我希望获得基于视图/天的结果,这样我就可以获得如下内容:

代码语言:javascript
复制
  date          views
  ====          =====
10-11-2013       15
10-12 2013       45
  ...            ...

我想我需要深入研究DB::raw()查询来实现这一点,但任何见解都会对我有很大的帮助,谢谢

编辑:新增created_at格式说明。

EN

回答 15

Stack Overflow用户

发布于 2013-12-16 12:18:19

我相信我已经找到了解决这个问题的方法,关键是mysql中的DateTime ()函数,它将日期转换为日期:

代码语言:javascript
复制
DB::table('page_views')
      ->select(DB::raw('DATE(created_at) as date'), DB::raw('count(*) as views'))
      ->groupBy('date')
      ->get();

然而,这并不是真正的Laravel雄辩的解决方案,因为这是一个原始的query.The,下面是我用雄辩的语法想出来的。第一个where子句使用碳日期进行比较。

代码语言:javascript
复制
$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"')
                            ));
票数 74
EN

Stack Overflow用户

发布于 2014-08-28 07:49:18

您可以使用Carbon (集成在Laravel中)

代码语言:javascript
复制
// Carbon
use Carbon\Carbon;   
$visitorTraffic = PageView::select('id', 'title', 'created_at')
    ->get()
    ->groupBy(function($date) {
        return Carbon::parse($date->created_at)->format('Y'); // grouping by years
        //return Carbon::parse($date->created_at)->format('m'); // grouping by months
    });
票数 68
EN

Stack Overflow用户

发布于 2015-05-19 18:03:09

这就是我是怎么做的。一个简短的示例,但使我的查询更易于管理

代码语言:javascript
复制
$visitorTraffic = PageView::where('created_at', '>=', \Carbon\Carbon::now->subMonth())
                        ->groupBy(DB::raw('Date(created_at)'))
                        ->orderBy('created_at', 'DESC')->get();
票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20603075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档