The*_*ine 0 php laravel eloquent laravel-5
我想查询用户并按年龄范围对他们进行分组
这是我到目前为止所做的
User::applicant()->get()
->groupBy(function ($item) {
return Carbon::parse($item->dob)->age;
})
->map(function ($collection) {
return $collection->count();
});
Run Code Online (Sandbox Code Playgroud)
这是我从上面的查询中得到的
现在想按年龄范围获取集合和订单
18-24: 1,
25-35: 5,
36-45: 89,
46+ : 84
Run Code Online (Sandbox Code Playgroud)
这是一个未经测试的解决方案(需要重构:
$groups = ['18-24' =>, '25-35', ..., '45'];
$applicants = User::applicant()->get();
$groups = collect($groups)
->map(function ($range, $key) use ($applicants) {
$rangeLimits = explode('-', $range);
$count = $applicants->filter(function ($applicant, $key) use ($rangeLimits) {
$age = Carbon::parse($applicant->dob)->age;
$verdict = $age >= $rangeLimits[0];
if (isset($rangeLimits[1])) {
$verdict = $age <= $rangeLimits[1];
}
return $verdict
})->count();
$range = ! isset($rangeLimits[1]) ? $range . '+' : $range;
return [ $range => $count ];
})->flatten()->all();
Run Code Online (Sandbox Code Playgroud)
首先,您需要创建一组您需要的组,最后一组不应有+.
然后你会得到所有的申请者。
然后,您遍历每个组,找出申请人是否在其范围内,并获得计数。这被映射到结果数组。