我正在使用Laravel(5.3)Eloquent ORM并尝试使用数据透视表进行过滤。我有三个表:events
,supervisors
和event_has_supervisors
。现在我只想将所有事件分配给某个主管。
在我的活动模型中,我得到了这个:
public function supervisors() {
return $this->belongsToMany(Supervisor::class, 'event_has_supervisors')->withPivot('hours');
}
在我的控制器中,我现在需要根据一些标准查询所有事件:
$events = Event::with($relations);
// This works well: get all Events in one or more given cities
$events = $events->whereIn('events.place_id', $cities);
// This does not work
$events = $events->whereIn('events.supervisor_id', $supervisors);
显然,最后一个where子句不起作用,因为我的事件表上没有这样的属性。但是在这种情况下如何查询我的数据透视表?我希望分配给该活动的任何主管都是$supervisors
中的任何主管。
答案 0 :(得分:2)
您可以将whereHas
用作:
$events = $events->whereHas('supervisors', function($q) use($supervisors) {
$q->whereIn('supervisor_id', $supervisors);
});