MySQL Laravel Eloquent 按照日期分组获取结果
在Laravel中使用Eloquent获取数据时,我们有时需要按照日期分组获取结果。例如,我们想要获取最近一个月中每天的用户注册量,或者获取订单总数和销售额按照每周、每月统计的结果。这些情况下,按照日期分组获取结果是十分有用的。
首先,我们需要利用MySQL的日期函数将日期格式化成我们需要的格式,例如,将 “created_at” 字段按照日期进行分组,我们可以这样写:
$users = DB::table('users')
->select(DB::raw('DATE(created_at) as date'), DB::raw('COUNT(*) as total'))
->groupBy('date')
->get();
其中,我们使用了Laravel内置的DB门面,使用该门面我们可以很方便地调用数据库相关操作。在select方法里,我们使用了MySQL的DATE函数将 “created_at” 字段按照日期格式化,并起了一个别名为 “date”。使用DB::raw方法可以让我们原样转义SQL语句,这对于自定义函数或含有特殊符号的查询是非常必要的。
之后,我们使用groupBy方法按照 “date” 字段进行分组,然后使用get方法获取结果集合。
如果我们是在模型里使用Eloquent获取数据,可以这样写:
$users = User::select(DB::raw('DATE(created_at) as date'), DB::raw('COUNT(*) as total'))
->groupBy('date')
->get();
这里以User模型为例,其他模型使用方法类似。
最后,我们可以使用循环将每天的结果输出,例如:
foreach (users asuser) {
echo "Date: " . user->date . " Total user: " .user->total . "<br>";
}
这样就可以得到形如下面的结果:
Date: 2022-05-01 Total user: 10
Date: 2022-05-02 Total user: 15
Date: 2022-05-03 Total user: 12
...
阅读更多:MySQL 教程
总结
利用MySQL的日期函数和Laravel中的DB门面和Eloquent模型,我们可以方便地按照日期对查询结果进行分组,并根据需求进行下一步的统计和处理。
极客教程