2015-09-28 4 views
0

У меня есть Accomodation и модель Feature. Размещение может иметь много особенностей (кухня, балкон и т.д.) с помощью accomodation_feature сводной таблицы:Получить модель по отношения ID's

//accomodation model 
public function features() 
{  
    return $this->belongsToMany('Feature'); 
} 

Я хочу, чтобы выбрать все, что есть номера как ВСЕХ выбранных функции активизированы. Например, я хочу, чтобы все помещения имели балкон, кухню и микроволновую печь.

Я попытался следующий, но я получаю каждое размещение, что есть балкон или на кухню или в микроволновой печи:

$features = array("1", "2", "3"); //id's of the features I want to select 

$accomodations = Accomodation 
::whereHas('features', function($q) use ($features) 
       { 
        $q->whereIn('features.id', $features); 
       })         
->get(); 

Как я могу выбрать все, что есть номера как ВСЕХ из предоставленных функций?

Заранее благодарим за любую помощь и извините (возможно) вводящее в заблуждение название. Я не мог придумать ничего более подходящего.

ответ

1

Используйте дополнительные параметры метода whereHas():

whereHas($relation, Closure $callback, $operator = '>=', $count = 1) 

т.е:

Accomodation::whereHas('features', function($q) use ($features) { 
    $q->whereIn('features.id', $features); 
}, '>=', count($features))->get(); 
+0

Большое спасибо, это действительно работает. Я не знал о дополнительном параметре, который вы можете установить. – Adrenaxus

+0

@JaviStolz Но это решение работает только случайно, потому что он хочет ВСЕ параметры (и, следовательно, вы можете использовать «count» .Что, если мы хотим получить определенный набор идентификаторов? Как бы вы его сработали? – Amarnasan

+1

Измените оператор с ' > = 'to' = '? –

0

в котором, безусловно, не так. Попробуйте выполнить следующие функции:

for each($features as feature) 
    $q->where('features.id', feature); 
+0

Я думаю, что 'whereIn()' в порядке. См. ответ Javi ниже. Спасибо за вашу помощь. – Adrenaxus

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