按关系ID获取模型

时间:2015-09-28 08:05:42

标签: php laravel laravel-4

我有一个Accomodation和一个Feature模型。通过accomodation_feature数据透视表:

,住宿可以有许多功能(厨房,阳台等)
//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();

如何选择所有提供的功能全部的住宿?

提前感谢您的帮助,并对(可能)误导性的标题感到抱歉。我想不出更合适的事情。

2 个答案:

答案 0 :(得分:1)

使用whereHas()方法的额外参数:

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

即:

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

答案 1 :(得分:0)

其中绝对错误。尝试循环使用您的功能:

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