2015-11-18 70 views
1

我有3個相關的表:項目,更新和update_items。Laravel Eloquent - 進行查詢時的關係中的關係

用戶創建一個項目,然後可以爲該項目創建更新,但更新包含更新項目。

因此,一個項目有很多更新和更新HAS MANY update_items。

我目前在項目模型的關係,以獲取更新:

public function updates() 
    return $this->hasMany('App\Update'); 
} 

然後在我的控制器:

$project = Project::with('updates')->where('id', $id)->first(); 

這個作品在更新拉,我得到一個數組。但是更新表本質上就像一個數據透視表,只包含更新的ID和相關的項目ID。

我需要知道的是我怎樣才能得到屬於更新的更新項目呢?

我希望能夠做到e.g:

@foreach ($project->updates as $update) 
    @foreach ($update->item as $item) 

     ECHO THROUGH THE UPDATE ITEMS 

    @endforeach 
@endforeach 

我可以在控制器做在一個查詢?

還是我必須建立在模型的updateItem另一種關係,然後在控制器做:

$project = Project::find($id); 
$updates = Project::with('updates_items')->where('project_id', $id)->all(); 

回答

3

你已經嘗試了nested eager loading點號?

$project = Project::with('updates.update_items')->find($id); 

然後,你可以這樣做:

@foreach ($project->updates as $update) 
    @foreach ($update->update_items as $item) 

     ECHO THROUGH THE UPDATE ITEMS 

    @endforeach 
@endforeach 

剛一說明,但:

我可以在控制器做在一個查詢?

急切加載是一種方便。它不運行單個查詢。在這種情況下,它將運行3個查詢來建立這種層次關係。

+1

這就是我喜歡Laravel的原因。 – Lovelock