您好我的实体之间存在以下关系。
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');
}
答案 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);
}