使用Eloquent按照Laravel 5.3中的数据透视表进行过滤

时间:2016-12-21 11:16:47

标签: php laravel laravel-5 eloquent

我正在使用Laravel(5.3)Eloquent ORM并尝试使用数据透视表进行过滤。我有三个表:eventssupervisorsevent_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中的任何主管。

1 个答案:

答案 0 :(得分:2)

您可以将whereHas用作:

$events = $events->whereHas('supervisors', function($q) use($supervisors) {
   $q->whereIn('supervisor_id', $supervisors);
});