Laravel 雄辩:表的两个所有者之间的关系

我有三张表学生、课程和成绩。


并且grade有两个外键:student_id和course_id,它属于两个表。


class Grade extends Model

{

    public function student()

    {

        return $this->belongsTo('App\Student');

    }

    public function course()

    {

        return $this->belongsTo('App\Course');

    }

}

此外,学生和课程有很多成绩:


class Student extends Model

{

    public function grades()

    {

        return $this->hasMany('App\Grade');

    }

}


class Course extends Model

{

    public function grades()

    {

        return $this->hasMany('App\Grade');

    }

}

现在,我想在学生和课程之间建立关系,例如,对于 student1,我想检索所有有成绩的课程。像这样的东西,但它不正确:


$student1->grades->course

我可以简单地写


@foreach($student1->grades as $grade)

      $grade->course

@endforeach

但我不想要它,我想($courses as $course)在我的 foreach 循环中。


牛魔王的故事
浏览 186回答 2
2回答

千万里不及你

我建议您需要参考https://laravel.com/docs/5.8/eloquent-relationships#has-many-through链接来实现这一点,在学生模式中添加hasManyThrough关系。public function courses()    {        return $this->hasManyThrough(            'App\Course',            'App\Grade',            'course_id', // Foreign key on Grade table...            'id', // Foreign key on Course table...            'id', // Local key on Student table...            'student_id' // Local key on Grade table...        );    }我没有测试过这段代码,但是,这就是方式

茅侃侃

让成绩表成为学生和课程之间多对多关系的数据透视表怎么样?class Student{    // an alternative name could be gradedCourses.    public function courses()    {        return $this->belongsToMany(Course::class, 'grades');    }}因此,您可以直接从这种关系中访问课程。@foreach($student->courses course)      $course->name@endforeach
打开App,查看更多内容
随时随地看视频慕课网APP