Laravel 使用表中的“用户出生日期”列按年龄获取用户

Laravel 使用表中的“用户出生日期”列按年龄获取用户,laravel,eloquent,laravel-5.7,Laravel,Eloquent,Laravel 5.7,简介: public function getAgeAttribute($value) { if($this->birthday !== null) { $bday = new \DateTime("{$this->birthday}"); $today = new \Datetime(date('Y-m-d')); $diff = $today->diff($bday); return $diff-&g

简介:

public function getAgeAttribute($value) {
    if($this->birthday !== null) {
        $bday = new \DateTime("{$this->birthday}");
        $today = new \Datetime(date('Y-m-d'));
        $diff = $today->diff($bday);

        return $diff->y;
    }

    return null;
}
我的
users
表中有user
birthdate
列。用户生日具有默认日期格式:
Y-m-d
。另外,我有一个自定义的mutator来获取
user
模型中的用户年龄

变异码:

public function getAgeAttribute($value) {
    if($this->birthday !== null) {
        $bday = new \DateTime("{$this->birthday}");
        $today = new \Datetime(date('Y-m-d'));
        $diff = $today->diff($bday);

        return $diff->y;
    }

    return null;
}
问题:

public function getAgeAttribute($value) {
    if($this->birthday !== null) {
        $bday = new \DateTime("{$this->birthday}");
        $today = new \Datetime(date('Y-m-d'));
        $diff = $today->diff($bday);

        return $diff->y;
    }

    return null;
}

如何使用
用户
模型通过年龄获得用户?

只需取今天的日期并减去年数即可。然后将其与生日进行比较

Users::where('birthday', '<=', date('Y-m-d', strtotime('-20 years')))->get();

Users::where('birth'),您可以使用
Collection
groupBy
方法根据用户的年龄对其进行分组

$users = User::all()->groupBy(function($user) {
             return $user->age;
         });
然后,您可以像这样获取特定用户的所有用户

$users->get(20);

希望这就是您想要的。

我希望这会对您有所帮助,
date()
函数是将字符串转换为datetime的php函数


$users=User::where('birthdate',”如果您使用的是MySQL,那么还有一种选择:

 $users = User::whereDate('birthdate' , '<', \DB::raw("CURDATE()-INTERVAL 20 YEAR"))->get();

$users=User::whereDate('birthdate'),“我们也可以这样做,我们将增加一年,并像这样在日期之间搜索

$from = Carbon::today()->subYears($request->age);
$to = Carbon::today()->subYears(($request->age)+1);
$users->whereBetween('birth_date',[$to, $from]);`

年龄
是什么意思?
?您的意思是要获取所有超过20年的用户?当然可以@Hassan列类型是什么?datetime/date?列类型字符串。如果您认为会将字段类型从字符串更改为date,我将更改它。@Hassan您可能希望使用本地范围来获取该字段。除了此答案之外,此logic可以包含在用户模型中定义的局部范围内。我认为这是更好的方法