[英]Laravel through model relationships
我有 3 个表的顺序如下:
it has -> id
学校it has -> id
it has -> school_id
it has -> semester_id
现在我试图在School
和SemesterClass
之间建立关系,以获得每所学校的班级列表以及每班学校的名称。
根据文档,我有这种关系:
学校模式
class School extends Model
{
public function semesters() {
return $this->hasMany(SchoolSemester::class);
}
public function classes() {
return $this->hasManyThrough(SemesterClass::class, SchoolSemester::class);
}
}
学校学期模式
class SchoolSemester extends Model
{
public function school() {
return $this->belongsTo(School::class);
}
public function classes() {
return $this->hasMany(SemesterClass::class, 'semester_id', 'id');
}
}
学期班模式
class SemesterClass extends Model
{
public function school() {
return $this->hasOneThrough(School::class, SchoolSemester::class, 'school_id', 'id');
}
public function semester() {
return $this->belongsTo(SchoolSemester::class, 'semester_id', 'id');
}
}
控制器
public function show($id)
{
$class = SemesterClass::with(['school', 'teacher', 'teacher.user', 'students'])->findOrFail($id);
dd($class);
//return view('admin.Classes.show', compact('class'));
}
结果
任何的想法?
您的中间表是school_semester
,laravel会发现foreign_key school_semester_id
默认情况下,但是,您的foreign_key是semester_id
,所以你需要指定在foreign_key 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
放在belongsTo
和 School Model 中。 并得到这样的关系:
SemesterClass::with(['semester.school'])
或者你可以在 SemesterClass 模型中定义一个 mutator:
protected $appends = ['school'];
public function getSchoolAttribute() {
return $this->semester->school;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.