使用来自 Table 的用户出生日期列按年龄获取用户

Get Users by Age Using User Birthdate Column From Table

简介:

我的 users table 中有用户 birthdate 列。用户生日有一个默认的日期格式:Y-m-d。另外,我有自定义突变器来获取 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;
}

问题:

如何使用 User 模型获取 年龄 的用户?

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

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

您可以使用 CollectiongroupBy 方法根据年龄对用户进行分组。

$users = User::all()->groupBy(function($user) {
             return $user->age;
         });

然后,您可以像这样获取特定用户的所有用户。

$users->get(20);

希望这就是您要找的。

希望对您有所帮助,date() 函数是 php 将字符串转换为日期时间的函数。

$users = User::where('birthdate' , '<', date('Y-m-d', strtotime('your input field name')))->get();

如果您使用的是 MySQL,还有这个替代方案:

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

我们也可以通过这种方式来完成我们将增加一年并在日期之间搜索这样

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