我有模特student
,courses
和group
。student
并group
通过courses
多对多关系建立联系。group
有一个名为的字段year
。我正在尝试让所有与他们有关联的学生,其中该组的实地年份等于变量$year
。初始查询的效果很好,但我还需要学生模型返回的$year
值等于该值的组。同一年只能有一个与该学生相关的组。这是我现在有的查询。
Student::whereHas('courses.group', function ($query) use ($year) {
return $query->where('year', '=', $year);
})->where('active', '=', '1')->with(['courses.group' => function ($query) use ($year){
$query->where('year', '=', $year);
}])->get()
该查询在一定程度上有效,它仅返回与之相关的一组学生,其组的值为$year
,还返回该学生具有的课程的关系,问题在于它返回了所有的关系,并且在这些关系中,它只返回与$year
。我需要那些courses
返回“ null”的关系不存在。知道我该如何解决吗?,谢谢;)
这是一个例子:这是一个学生模型
它与courses
关系和groups
关系一起返回。
最后,我结束了多次连接,我不知道它是否比使用Eloquent方法效率低。如果有人感兴趣,这是查询。
Student::whereHas('courses.group')->where('active', '=', '1')
->join('courses', 'courses.id_student','=','students.id_student')
->join('groups', 'groups.id_group', '=', 'courses.id_group')
->join('degree', 'degree.id_degree', 'groups.id_degree')
->where('year', '=', $year)->get()
如果有人知道更好,更清洁或更有效的方法,我会不厌其烦:)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句