2016-06-30 6 views
1

を持っていますが、私のモデルです:Laravel 5.2 - だからここ介して1またはカスタム属性

  • EmployerHours belongsToのReport
  • Report belongsToのEmployer

我々が取得する$employerHour->report->employerをしていた多くの場所がありました雇用者はEmployerHourに縛られていた。 (私はスキーマを変更する能力がないことに留意してください)。私はEmployerHourモデルに次のことを行うことを決めた。

/** 
* Attribute for retrieving the Employer directly from employer hours 
* @return App\Models\Employer 
*/ 
public function getEmployerAttribute() 
{ 
    return $this->report->employer; 
} 

これはほとんどハックのように思えます。しかし、これが起こる場所は何度もあり、これが有用になっています。私はそこにはhasOneThroughの関係がなければならないと思っていたが、そうは思われない。これを行うにはこれが正しい方法ですか、何か不足していますか?

答えて

-1

方法が常にある:)

あなたがテーブルを結合することによって、これを達成することができます。たとえば、次のようになります。

// EmployerHour.php 

public function employer() 
{ 

    return Employer 

     ::select('employers.*') 

     ->join('reports', 'employers.id', '=', 'reports.employer_id') 

     ->join('employerhours', 'reports.id', '=', 'employerhours.report_id') 

     ->where('employerhours.id', $this->id); 

} 

この例で使用する列名を変更する必要があります。

関連する問題