2016-06-15 106 views
0

我想根據查詢得到結果,但不知道如何以這種方式執行此操作。我有屬於一個用戶的項目。所以一個項目有一個user_id。
用戶然後屬於一個部門,所以用戶表具有department_id。基於查詢的返回模型

如果我拉一個項目的結果,我看到這樣的事情。

id: 3 
projectName: This is a project 
user_id: 99 
deleted_at: 2016-06-15 09:28:00 
created_at: 2016-06-14 14:34:16 
updated_at: 2016-06-15 09:28:00 

如果我拉一個用戶的數據我看

id: 99 
userName: Some Name 
userEmail: [email protected] 
active: 1 
department_id: 4 
created_at: 2016-06-13 09:56:59 
updated_at: 2016-06-13 12:16:28 

最後,如果我檢查的部門,我得到

id: 4 
departmentName: Department A 
created_at: 2016-06-09 12:09:43 
updated_at: 2016-06-15 08:03:45 

在我的控制,我可以做下面讓所有項目

$projects = Project::dateDescending()->get(); 

不過,這一次我只希望得到按部門A的用戶作了目前該項目我做

$projects = Project::dateDescending()->get(); 
if(!empty($projects)) { 
    foreach ($projects as $project) { 
     dd($project->user->department->where('departmentName', 'Department A')); 
    } 
} 

上述的問題是,它返回一個部門的對象,而不是項目對象。 所以我的計劃是獲得部門A中的用戶所做的所有項目。我該如何去做這件事?

感謝

回答

2

假設你的模型是正確的設置,你可以做到這一點完全和Eloquent很容易。

$projects = \App\Project::whereHas('users.departments', function($q) { 
    $q->where('departmentName', 'Department A'); 
})->get(); 
+0

你也可以在'Department'和'Project'之間定義'hasManyThrough'關係,以避免輸入一個嵌套的資源。 – EricDS

+0

完美地工作:-)我設法提出我自己的解決方案,但它使用數據庫來做原始連接。你的方式更清潔。謝謝 –