我有3个相关的表:projects,updates和update_items。
用户创建项目,然后可以为该项目创建更新,但更新包含更新项。
因此,一个项目有很多更新,并且更新有很多update_items。
我目前在项目模型中有一个关系来获取更新:
public function updates()
return $this->hasMany('App\Update');
}
然后在我的控制器中:
$project = Project::with('updates')->where('id', $id)->first();
这可以提取更新,我得到一个数组。但更新表基本上就像一个数据透视表,只包含更新的ID和相关的项目ID。
我需要知道的是如何提取属于更新的更新项?
我希望能够做到:
@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();
答案 0 :(得分: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个查询以构建此层次关系。