Laravel Eloquent-仅在“ with”中的“ where”条件为true的情况下获取关系元素

Diego Alejandro Lopez的图片

我有模特studentcoursesgroupstudentgroup通过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关系一起返回

学生关系

Diego Alejandro Lopez的图片

最后,我结束了多次连接,我不知道它是否比使用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章