Laravel雄辩的多对多查询

时间:2020-04-03 01:19:25

标签: php laravel

我在两个表之间有many to many关系,例如lecturestudents (users)

现在,如果lecture是私有的或仅限于受邀用户,则仅lecture_student表中的条目带有student_id

lecture_student具有student_id和'lecture_id'键。

因此,如果讲座仅限于某些学生,那么lecture_student中将包含所有user_id行的列表,否则将向所有人开放。

当用户登录时,我使用以下查询显示Lectures的列表

Lecture::where('user_id', '<>',$logged_in_user->id)
    ->futureLectures() // query scope defined for future lectures only
    ->get()

我如何为受邀参加并同时对所有人开放的学生提供讲座?

以上查询使我得到student的所有演讲天气,无论是否受邀lecture

我尝试了whereHas,但是由于lecture_student表仅在lecture限于某些用户的情况下才有条目,在打开lecture,{ {1}}没有行。

谢谢

1 个答案:

答案 0 :(得分:1)

您可以Query Relationship Existence进行邀请登录学生的讲座

whereHas('students', function ($query) use ($logged_in_user) {
    $query->where('id', $logged_in_user->id);
})

Query Relationship AbsenceorDoesntHave,也可以得到没有相关(受邀)学生的讲座。

orDoesntHave('students')

Parameter Group里面做。

Lecture::where(function ($query) use ($logged_in_user) {
        $query->whereHas('students', function ($q) use ($logged_in_user) {
                $q->where('id', $logged_in_user->id);
            })
            ->orDoesntHave('students');
    })
    ->futureLectures()
    ->get();