Почему ссылка на ребенка включает его при возврате родителя? - PullRequest
0 голосов
/ 27 мая 2018

У меня есть форумы, у каждого форума много постов, и у каждого поста много комментариев.Сообщения принадлежат этому форуму, а комментарии принадлежат этим сообщениям.

Я пытаюсь вернуть этот форум с каждым его сообщением и каждым комментарием для каждого из этих сообщений.Вот код, с которым я закончил:

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 голосов
/ 27 мая 2018

Это работает, потому что вызов $forum->posts будет лениво загружать сообщения, связанные с форумами.И вызов $post->comments для каждого из них будет лениво загружать комментарии, связанные с сообщениями.

Более элегантный и эффективный способ - нетерпеливая загрузка отношений:

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

    return response()->json($forum, 201);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...