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
表中有userbirthdate
列。用户生日具有默认日期格式: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可以包含在用户模型中定义的局部范围内。我认为这是更好的方法