如何使用laravel eloquent查询用户并按年龄范围对他们进行分组

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)

thi*_*vin 5

这是一个未经测试的解决方案(需要重构:

$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)

首先,您需要创建一组您需要的组,最后一组不应有+.

然后你会得到所有的申请者。

然后,您遍历每个组,找出申请人是否在其范围内,并获得计数。这被映射到结果数组。