2015-09-28 164 views
0

我有一個AccomodationFeature模型。一個住處有許多特性(廚房,陽臺等),通過accomodation_feature透視表:通過關係獲取模型ID的

//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(); 

我怎麼能選擇具有的提供的功能ALL全部住宿?

在此先感謝您的幫助,並感謝(或許)誤導性標題。我想不出更合適的事情。

回答

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

相關問題