2015-09-28 108 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

相关问题