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

Php Laravel雄辩:表的两个所有者之间的关系,php,laravel,eloquent,relationship,Php,Laravel,Eloquent,Relationship,我有三张表,分别是学生、课程和成绩 年级有两个外键:学生id和课程id,它属于两个表 class Grade extends Model { public function student() { return $this->belongsTo('App\Student'); } public function course() { return $this->belongsTo('App\Course');

我有三张表,分别是学生、课程和成绩

年级有两个外键:学生id课程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');
    }
}

现在,我想在学生和课程之间建立一个关系,例如,对于学生1,我想检索所有有分数的课程。类似这样但不正确:

$student1->grades->course
我只会写

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

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

我建议您需要参考链接来实现这一点

在学生模式中添加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
@foreach($student->courses course)
      $course->name
@endforeach