在Laravel数据透视表中无法获得关系
问题描述:
我想在laravel的三个表之间建立关系。目前,我有三个型号在Laravel数据透视表中无法获得关系
课堂,
public function subjects(){
return $this->belongstoMany('Subject','subject_section_classroom');
}
科,
主题
我的表是
classrooms(id, name)
sections(id, name)
subjects(id, name)
subject_section_classroom(id, classroom_id, section_id, subject_id)
在我CLAS sroomController我有
public function assignsubjects($class_id, $section_id){
$classroom = Classroom::find($class_id);
$section = Section::find($section_id);
$subjects = Subject::lists('name','id');
$selected_subjects = $classroom->subjects()->where('section_id', '=', 1);
$subjects = Subject::lists('name','id');
return view('assignedit', compact('classroom','section','subjects', 'selected_subjects'));
}
但我无法从上述关系中获得selected_subjects。当我试图让上述查询的SQL(带 - > toSQL()),我得到
`"select * from `myschool_subjects` inner join `myschool_subject_section_classroom` on `myschool_subjects`.`id` = `myschool_subject_section_classroom`.`subject_id` where `myschool_subject_section_classroom`.`classroom_id` = ? and `section_id` = ?"`
我想不通我在做什么错在这里。 请帮助。
答
我觉得你的问题是从 php $selected_subjects = $classroom->subjects()->where('section_id', '=', 1);
改过来了它: php $selected_subjects = $classroom->subjects()->where('section_id', '=', 1)->get();
我知道Laravel 4不支持三重表转动,因此如这个由@jarektkaczyk创建的包(https://github.com/jarektkaczyk/Eloquent-triple-pivot)已经创建。不知道是否有类似的Laravel 5存在。 –
我认为,你的表结构有点不对。你能否给我一些表格中的章节和主题的例子,以便我更好地理解你的逻辑。 – Phargelm
实际上我想输出课堂的所有科目。简单的我想要透视表中的课堂科目,其中部分是定义的;) –