如何仅根据出生日期获取特定年龄的用户

时间:2018-07-19 09:05:03

标签: laravel eloquent

我有一个User模型,该模型具有一种获取年龄的方法。

console.log(new Intl.NumberFormat('en-US', { maximumSignificantDigits: 4}).format(1 ));
console.log(new Intl.NumberFormat('en-US', { maximumSignificantDigits: 4}).format(1.23 ));
console.log(new Intl.NumberFormat('en-US', { maximumSignificantDigits: 4}).format(1.23456 ));

那很好。

在控制器中,我试图使所有用户都超过16岁,但是问题是用户不需要在注册时输入自己的DOB,只需稍后在应用程序中输入即可。如何检索特定年龄的所有用户的记录,并为空条目打折。

我已经尝试过了

public function age() {
      return $this->date_of_birth->diffInYears(\Carbon\Carbon::now());
    }

但是我收到以下错误消息

  

调用未定义的方法Illuminate \ Database \ Query \ Builder :: age()

4 个答案:

答案 0 :(得分:0)

公共功能index(){

  $users = User::whereNotNull('date_of_birth')->take(10);

  if(!empty($users)){
    $validusers = $users->get();
  }


  return view('egistrations.index', compact('validusers'));
}

您需要如上所述使用 get(),也可以使用 all()

答案 1 :(得分:0)

您忘记在查询中添加 get()

$users = User::where('date_of_birth','!=',NULL)->take(10)->get();

答案 2 :(得分:0)

public function index(){

    $users_with_age = User::whereNotNull('date_of_birth')
                ->take(10)
                ->get()
                ->each(function ($user) {
                    $user->age = $user->age();
                });
    return view('egistrations.index', compact('users_with_age'));
}

答案 3 :(得分:0)

您已经使用map()来使用$user->age

public function index(){

      $users = User::whereNotNull('date_of_birth')->take(10)->get();

      if(!empty($users)){

          $validusers = $users->map(function($user){
             return  $user['age'] = $user->age();
         });

      }


      return view('egistrations.index', compact('validusers'));
    }