如何使用出生日期计算用户的平均年龄

DM *_*sam 0 php mysql sql laravel eloquent

我想使用用户的出生日期计算用户的平均年龄。我有一个名为 的模型类Member,包括一个获取用户年龄的函数。

<?php
namespace App;

use Illuminate\Database\Eloquent\Model;
use Carbon\Carbon;

class Member extends Model {
    public static function averageAge() {
        //What to do here
    }

    public function age() {
        $birthDate = Carbon::parse($this->birthDate);
        return $birthDate->diffInYears(Carbon::now());
    }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ean 5

Carbon一种计算日期“年龄”的方法,因此您可以在模型中执行此操作:

class Member extends Model
{
    protected $casts = [
        'birthDate' => 'date',
    ];

    public function getAgeAttribute()
    {
         return $this->birthDate->age;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您想计算多个成员的平均年龄,那么我将创建一个类,该类接受一组成员并返回该值:

class AverageAge
{
    public static function forMembers(Collection $members)
    {
        return $members->average(function ($member) {
            return $member->age;
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

然后您可以像这样使用它:

$members = Member::where(...)->get();

$averageAge = AverageAge::forMembers($members);
Run Code Online (Sandbox Code Playgroud)