为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
牛魔王的故事 2022-01-08 14:44:55
我有三张表学生、课程和成绩。并且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 循环中。
查看完整描述

2 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

我建议您需要参考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...

        );

    }

我没有测试过这段代码,但是,这就是方式


查看完整回答
反对 回复 2022-01-08
?
茅侃侃

TA贡献1842条经验 获得超22个赞

让成绩表成为学生和课程之间多对多关系的数据透视表怎么样?


class Student

{

    // an alternative name could be gradedCourses.

    public function courses()

    {

        return $this->belongsToMany(Course::class, 'grades');

    }

}

因此,您可以直接从这种关系中访问课程。


@foreach($student->courses course)

      $course->name

@endforeach


查看完整回答
反对 回复 2022-01-08
  • 2 回答
  • 0 关注
  • 185 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号