内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用
我现在有一张表格_每次访问者访问页面时记录一行的视图,记录用户的IP/id和页面本身的id。我要补充的是_at列的类型是:时间戳,因此它包括小时/分钟/秒。当我尝试groupBy查询时,由于秒的不同,它不会将相同的日子分组在一起。
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 ... ... ...
我希望根据视图/日获得结果,这样我就可以得到如下内容:
date views ==== ===== 10-11-2013 15 10-12 2013 45 ... ...
我想我需要深入研究DB::RAW()查询才能实现这一点,你能帮帮我吗?
我相信我已经找到了解决这个问题的方法,关键是MySQL中的date()函数,它将日期时间转换为仅日期:
DB::table('page_views') ->select(DB::raw('DATE(created_at) as date'), DB::raw('count(*) as views')) ->groupBy('date') ->get();
第一个WHERE子句使用Carbon日期进行比较。
$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"') ));
你可以使用Carbon(集成在Laravel中)
// 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 });