2016-01-19 34 views
2

您好,我有我的實體之間的以下關係。Laravel hasManyThrough約束中間模型

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

我想要寫爲我的用戶對象的方法,其將返回所有鄰域的用戶是一個通過isActive = 1 NeighborhoodFilter指示的構件。

我試過以下,但我不知道在哪裏把約束'isActive = 1'。有任何想法嗎?

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

回答

3

如果從鄰居有街坊NeighborhoodFilter之間的關係可以用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); 
} 
+0

謝謝。第二個代碼片段爲我工作。運行時遇到的第一個錯誤是「調用未定義的方法neighborhoodFilters()」,並進一步聲明「where Has has not found in class HasManyThrough」。 – user481779