为什么引用孩子在返回父母时会包含它?

时间:2018-05-27 17:56:06

标签: php laravel eloquent

我有论坛,每个论坛都有很多帖子,每个帖子都有很多评论。帖子属于该论坛,评论属于这些帖子。

我正在尝试使用每个帖子返回该论坛,以及每个帖子的每条评论。这是我最终得到的代码:

public function showposts($id)
{
    $forum = Forum::find($id);

    $comments = $forum->posts->each(function($post)
    {
        $comment = $post->comments;
    });

    return response()->json($forum, 201);
}

我不明白为什么会这样。

如果我不包含$ comments部分,那么它将只返回论坛而没有任何帖子或评论,如果我删除循环,那么只返回论坛和帖子而不发表评论。

我仍然只是回归论坛,$ comments根本没有包含,但它会影响它。谁能解释一下这里发生了什么?

1 个答案:

答案 0 :(得分:0)

这很有效,因为调用$forum->posts会延迟加载与论坛相关的帖子。并且在每个人上调用$post->comments会延迟加载与帖子相关的评论。

更优雅,更高效的方式是eager load关系:

public function showposts($id)
{
    $forum = Forum::with('posts.comments')->find($id);

    return response()->json($forum, 201);
}