2016-01-19 2 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

Спасибо. Второй фрагмент кода работал для меня. Первый фрагмент при запуске с ошибкой «Вызов неопределенного метода окрестностиFilters()», и далее он указал «whereHas not found in class HasManyThrough». – user481779

Смежные вопросы