2015-09-09 106 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();' –