【问题标题】:Laravel average value on accessor访问器上的 Laravel 平均值
【发布时间】:2020-04-24 08:10:49
【问题描述】:

我需要计算用户的平均年龄。

这是我的访问代码

public function getAgeAttribute()
{
    if ($this->birthday)
        return Carbon::parse($this->birthday)->age;
    else
        return 'Unknown';
}

如何计算访问者的平均年龄? 感谢您的帮助..

【问题讨论】:

标签: laravel accessor


【解决方案1】:

在你的 User.php 中:

public function getAgeAttribute()
{
  if ($this->birthday)
    return Carbon::parse($this->birthday)->age;
  else
    return 'Unknown';
}

如果您想计算所有用户的平均年龄,请将其放在您需要的地方:

User:all()
    ->where('age', '!=', 'Unknown')
    ->avg('age');

这将根本不包括没有出生日期的用户,因为它没有意义。

如果birthday属性在users表中,不选择没有生日日期的用户会更有效:

User:whereNotNull('birthday')
    ->get()
    ->avg('age');

【讨论】:

  • 谢谢,但是我的用户有将近 100,000 我添加后会很慢。有什么办法可以改善吗?
  • 如果你不需要每次请求完成时都得到精确的结果,你可以缓存一天左右的平均年龄
【解决方案2】:

Carbon 对象的属性年龄不存在。

您可以使用带有实际日期的 diffInYears 来计算年龄

public function getAgeAttribute()
{
    if ($this->birthday)
        return Carbon::now()->diffInYears(Carbon::parse($this->birthday));
    else
        return 'Unknown';
}

在您的模型中,您可以添加受保护的属性 $dates 以便直接检索 Carbon 对象并且不解析。

【讨论】:

  • age 没有记录,但确实存在
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-06
  • 1970-01-01
  • 1970-01-01
  • 2018-04-14
  • 2022-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多