2015-09-09 75 views
1

所以我们可以说我有三个型号Laravel 5.1查询有关关系的外键的属性

  • 国家
  • 公司
  • 工人

我有以下明显的关系:

Country::hasMany('Companies'); 
Company::hasMany('Department'); 
Department::hasMany('Worker'); 

Country::hasManyThrough('Department', 'Company'); 
Company::hasManyThrough('Worker', 'Department'); 

现在我想要做到的,是让所有一个Country,那里有一个Workersalary超过10000

所以基本上我正在寻找一个关系,其中的Departments我可以在外部关系上调用where函数。

事情是这样的:

Country::find(1)->departments()->where('...', '>=', 10000); 

我想过试图建立一个范围函数模型Department,但真的不知道什么写有:

public function scopeSalary($query, $salary) 
{ 
    return $query->somethingHere()->where('salary', '>=', $salary); 
} 

我就知道我可以用Join statement in query builder做到这一点,但我认为这可能有点不好。我想知道在Laravel中是否有办法在关系外键模型上调用where函数。

回答

1

您可以使用whereHas http://laravel.com/api/5.1/Illuminate/Database/Eloquent/Builder.html#method_whereHas

Country::find(1)->departments()->whereHas('workers', function($q) { 
    $q->where('salary', '>=', 10000); 
})->get(); 
+0

我想补充一点,为了使用该函数内部的变量,你必须使用“使用”的关键字。例如,如果你有变量$薪水,你想在函数中使用,你可以使用它像这样: '国家::发现(1) - >部门() - > whereHas(“工人”,函数($ q)use($ salary){ $ q->其中('salary','> =',$ salary); }) - > get();' –