Laravel hasManyThrough对中间模型有约束

use*_*779 3 php laravel

嗨,我的实体之间有以下关系.

User
  - id
  - other stuff
NeighborhoodFilter
  - id
  - userId
  - neighborhoodId
  - isActive
Neighborhood
  - id
  - other stuff
Run Code Online (Sandbox Code Playgroud)

我想为我的User对象编写一个方法,该方法将返回UserFilter中isActive = 1表示User所属的所有邻域.

我尝试过以下但我不知道在哪里放置约束'isActive = 1'.有任何想法吗?

public function neighborhoods()
{
    return $this->hasManyThrough('Neighborhood', 'NeighborhoodFilter', 'userId', 'id');
}
Run Code Online (Sandbox Code Playgroud)

Fie*_*ete 6

如果您在Neighborhood和NeighborhoodFilter之间有一个关系,您可以使用该whereHas功能.

public function neighborhoods()
{
    return $this->hasManyThrough('Neighborhood', 'NeighborhoodFilter', 'userId', 'id')->whereHas('neighborhoodFilters', function($q){
        $q->where('isActive', 1);
    });
}
Run Code Online (Sandbox Code Playgroud)

否则你可以使用belongsToMany关系和wherePivot函数.

public function neighborhoods()
{
    return $this->belongsToMany('Neighborhood', 'neighborhood_filters', 'user_id', 'neighbor_id')->wherePivot('isActive', 1);
}
Run Code Online (Sandbox Code Playgroud)