我在两个表之间有many to many
关系,例如lecture
和students (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}}没有行。
谢谢
答案 0 :(得分:1)
您可以Query Relationship Existence进行邀请登录学生的讲座
whereHas('students', function ($query) use ($logged_in_user) {
$query->where('id', $logged_in_user->id);
})
和Query Relationship Absence和orDoesntHave
,也可以得到没有相关(受邀)学生的讲座。
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();