【问题标题】:Use Eloquent to filter by pivot table in Laravel 5.3在 Laravel 5.3 中使用 Eloquent 按数据透视表过滤
【发布时间】:2016-12-21 19:34:36
【问题描述】:

我正在使用 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 中的任何主管。

【问题讨论】:

    标签: php laravel laravel-5 eloquent


    【解决方案1】:

    您可以将whereHas 用作:

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

    【讨论】:

    • 完美运行,谢谢。我唯一需要修改的是“supervisor_id”列,因为我在两个表中都使用了它并且得到了“不明确的列名”错误。
    猜你喜欢
    • 2021-01-09
    • 2017-10-17
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    • 2017-07-01
    • 1970-01-01
    • 2017-09-30
    • 1970-01-01
    相关资源
    最近更新 更多