Laravel hasManyThrough对中间模型有约束

时间:2016-01-19 18:30:43

标签: php laravel

您好我的实体之间存在以下关系。

User
  - id
  - other stuff
NeighborhoodFilter
  - id
  - userId
  - neighborhoodId
  - isActive
Neighborhood
  - id
  - other stuff

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

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

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

1 个答案:

答案 0 :(得分:6)

如果您在邻居中的邻居和邻居过滤器之间存在关系,则可以使用whereHas功能。

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

否则,您可以使用belongsToMany关系和wherePivot函数。

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