如何在多对多关系中检索相关模型的相关模型?

时间:2018-02-24 10:58:33

标签: sql database eloquent many-to-many relationship

问题清楚了吗?基本上我有这些表:

|------------|                      |-----------------|
| Group      |                      | Student-Subject |
|------------|                      |-----------------|
| id         |                      | id              |
| group_name |                      | student_id      |
|------------|                      | subject_id      |                      
                                    |-----------------|

                            |--------------|    |--------------|
                            | Student      |    | Subject      |
                            |--------------|    |--------------|
                            | id           |    | id           |
                            | student_name |    | subject_name |
                            | group_id     |    |--------------|
                            |--------------|

如果我必须解释这种关系(这很明显,但要明确),学生有很多科目,而且学科有很多学生。它们通过Student-Subject表连接。

除此之外,学生分组。它们通过group_id字段连接到组表。

现在,我想要达到的目标是,我想获得群体模型的主题。基本上,我想得到小组中所有学生的所有科目。当然我已经有了自己的解决方案:

SELECT subject.id, subject.subject_name
FROM tbl_student_subject studsubj 
LEFT JOIN tbl_student student ON student.id = studsubj.student_id
RIGHT JOIN tbl_subject subject ON subject.id = studsubj.subject_id
WHERE student.group_id = 1

This is the sample result.

如果您观察到图片(查询结果),则会复制主题。我认为这已经足够了,但我当然不希望它们重复。

所以,我想通过提出这个问题来实现的目标是,如何在不重复的情况下获得结果?我是否正确使用我的SQL脚本?

当我在这时,我想在Laravel Eloquent模型中这样做。但是使用“hasManyThrough”方法无法实现。如果可能的话,我将使用这个原始SQL来完成我想要实现的目标。

我希望有人理解并能够回答我的问题并更正我的剧本。谢谢!

1 个答案:

答案 0 :(得分:0)

这是一个简单的答案。我只需要在查询中添加DISTINCT。

SELECT DISTINCT subject.id, subject.subject_name 
FROM tbl_student_subject studsubj 
LEFT JOIN tbl_student student ON student.id = studsubj.student_id 
RIGHT JOIN tbl_subject subject ON subject.id = studsubj.subject_id 
WHERE student.group_id = 1