php - 如何使用 laravel eloquent 查询用户并将他们分组在年龄范围内
问题描述
我想查询用户并按年龄范围分组
这是我到目前为止所做的
User::applicant()->get()
->groupBy(function ($item) {
return Carbon::parse($item->dob)->age;
})
->map(function ($collection) {
return $collection->count();
});
这是我从上面的查询中得到的
现在想按年龄范围获取集合和订单
18-24: 1,
25-35: 5,
36-45: 89,
46+ : 84
解决方案
我将使用map()
and的组合mapToGroups()
,我很确定一定有一个更简单的方法,但这对我来说很有趣:
$ranges = [ // the start of each age-range.
'18-24' => 18,
'25-35' => 25,
'36-45' => 36,
'46+' => 46
];
$output = User::applicant()
->get()
->map(function ($user) use ($ranges) {
$age = Carbon::parse($user->dob)->age;
foreach($ranges as $key => $breakpoint)
{
if ($breakpoint >= $age)
{
$user->range = $key;
break;
}
}
return $user;
})
->mapToGroups(function ($user, $key) {
return [$user->range => $user];
})
->map(function ($group) {
return count($group);
})
->sortKeys();
dd($output);
这背后的想法是为每条记录添加一个属性,其值对应于他们的年龄范围,然后按此键对它们进行分组,创建一组按范围分组的用户数组,最后计算此键内每个子数组的元素。
这应该返回类似:
=> Illuminate\Support\Collection {#2948 all: [ "25-35" => 1, "36-45" => 2, "46+" => 1, ], }
推荐阅读
- javascript - URL 在 Postman 中有效,但在 Nodejs 中无效
- python - 惩罚线性回归的预测区间
- php - 如何将此 sql-injection-susceptible 函数转换为 MySQLi 中的准备函数?
- git - 如何使用 git 获取完整的 repo 副本
- rust - 为什么 Rust 借用检查器会忽略函数参数中的可变指针?
- python - Python -m 切换运行包内的模块
- android - 评估项目“:app”时出现问题 - Firebase 与 Flutter 集成
- html - 有没有办法我可以使用嵌入视频
- kepler.gl - 在没有互联网连接的笔记本电脑上运行 kepler.gl
- css - SCSS&符号编译的完整根元素不仅是父元素