在Laravel模型关联中,提供了远程一对一关联和远程一对多关联,但是文档中却没有说明这两种关联的反向写法。其实Laravel中的远程一对一和远程一对多关联也有反向关联,并且十分简单,都是 hasOneThrough 关联,下面举例说明。

有如下数据表:

colleges
    id - integer
    name - string

majors
    id - integer
    college_id - integer
    name - string

students
    id - integer
    major_id - integer
    name - string

获取指定学院的所有学生(远程一对多)

class College extends Model
{
    public function students()
    {
        return $this->hasManyThrough(Student::class,Major::class);
    }
}

获取指定学生所属的学院,注意外键的定义(远程一对多的反向,也就是远程一对一)

class Student extends Model
{
    public function department()
    {
        return $this->hasOneThrough(Department::class,Major::Class,'id','id','major_id','department_id');
    }
}