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
,其中 Worker
和 salary
超过 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();
假设我有三个模型
- Country
- Company
- Department
- Worker
我有以下明显的关系:
Country::hasMany('Companies');
Company::hasMany('Department');
Department::hasMany('Worker');
Country::hasManyThrough('Department', 'Company');
Company::hasManyThrough('Worker', 'Department');
现在我想要实现的是获得 Country
的所有 Departments
,其中 Worker
和 salary
超过 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();