Laravel Eloquent - 进行查询时关系中的关系

时间:2015-11-18 17:17:03

标签: php laravel laravel-5

我有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();

1 个答案:

答案 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个查询以构建此层次关系。