2016-06-30 2 views
1

Так вот мои модели:Laravel 5,2 - имеет один через или пользовательский атрибут

  • 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); 

} 

Возможно, вам нужно изменить имена столбцов, используемые в этом примере.