2017-10-31 32 views
0

生年月日を使用しているユーザーの平均年齢を計算します。私はMemberと呼ばれるModelクラスを持っています。これには、ユーザーの年齢を取得する関数も含まれています。生年月日を使用しているユーザーの平均年齢を計算する方法

<?php 
namespace App; 

use Illuminate\Database\Eloquent\Model; 
use Carbon\Carbon; 

class Member extends Model { 
    public static function averageAge() { 
     //What to do here 
    } 

    public function age() { 
     $birthDate = Carbon::parse($this->birthDate); 
     return $birthDate->diffInYears(Carbon::now()); 
    } 
} 
+2

あなたは「中年」の定義は何ですか? –

+3

@ MarkBaker 5〜15世紀? – Strawberry

答えて

3

カーボンがあなたの代わりにあなたのモデルでこれを行うことができますので、日付の「年齢」を算出する方法があります。

class Member extends Model 
{ 
    protected $casts = [ 
     'birthDate' => 'date', 
    ]; 

    public function getAgeAttribute() 
    { 
     return $this->birthDate->age; 
    } 
} 

あなたが計算したいしている場合複数のメンバーの平均年齢を指定すると、メンバーのコレクションを取得してその値を返すクラスを作成し、その値を返します。

class AverageAge 
{ 
    public static function forMembers(Collection $members) 
    { 
     return $members->average(function ($member) { 
      return $member->age; 
     }); 
    } 
} 

あなたはこのように使用することができます:

$members = Member::where(...)->get(); 

$averageAge = AverageAge::forMembers($members); 
+0

ありがとうございました。 私は、フォームリクエストに来る日付について、Carbonオブジェクトか、それとも解析する必要があるのか​​という別の質問がありますか? –

+1

@BettyDM問題ありません!フォーム要求に含まれるものは文字列なので、 'Carbon'インスタンスが必要な場合は解析する必要があります。 –

関連する問題