Laravel 5.1 查询关系的外键属性

Laravel 5.1 query about relationship's foreign key's attribute

假设我有三个模型

  • Country
  • Company
  • Department
  • Worker

我有以下明显的关系:

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

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

现在我想要实现的是获得 Country 的所有 Departments,其中 Workersalary 超过 10000。

所以基本上我正在寻找一个关系,我可以在其中调用对外关系的 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 函数。

您可以使用 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();