Ваша промежуточная таблица: school_semester
, laravel найдет по умолчанию Foreign_key school_semester_id
, однако, ваш ключ Foreign_key равен semester_id
, поэтому вам необходимо указать ключ_языка в hasManyThrough
:
public function classes() {
return $this->hasManyThrough(
SemesterClass::class,
SchoolSemester::class
'school_id', // Foreign key on school_semesters table...
'semester_id', // Foreign key on classes table...
'id', // Local key on schools table...
'id' // Local key on school_semesters table...
);
}
И измените свой hasOneThrough
код следующим образом:
public function school() {
return $this->hasOneThrough(
School::class,
SchoolSemester::class,
'id',
'id',
'semester_id',
'school_id' );
}
Другое решение:
Поскольку обратное является просто объединением двух отношений BelongsTo, так что вы можете просто указать belongsTo
в SchoolSemester и School Model. И получите отношения следующим образом:
SemesterClass::with(['semester.school'])
Или вы можете определить мутатор в SemesterClass Model:
protected $appends = ['school'];
public function getSchoolAttribute() {
return $this->semester->school;
}