Неопределенная переменная «Комментарии» в Compact Laravel - PullRequest
0 голосов
/ 26 марта 2020

Я получаю ошибку «неопределенное смещение 1». Он возвращает все, что мне нужно -> сообщения и комментарии в категории. Тем не менее, я считаю, что проблема «Undefined Offset 1», вероятно, из-за некоторых сообщений, которые не имеют ответов на них ?? -> Таким образом, помогите.

У меня есть 1. Категория Модель 2. Пост Модель 3. Комментарий Модель

Это функция шоу в моей категории Модель

  public function show($id)
    {

        $category = Category::with('posts.comments')->find($id);


        return view('categories.show', compact('category'));
    }

Я установил связь для 'Category hasMany Posts' -> 'Post hasMany Comments'.

Ответы [ 2 ]

2 голосов
/ 26 марта 2020

Вы можете попробовать это

public function show($id)
{
    $comments = []; // Empty array to initialize the variable. This variable will be filled once the foreach statement is ran.
    $category = Category::find($id);
    if($category !== null) {
        $posts = $category->posts;

        foreach($posts as $post) {

            $comments = $post->comments;
        }

    }
    return view('categories.show', compact('posts', 'category', 'comments'));
}

Альтернативный метод

public function show(Category $category) //same as... public function show($id)
{
    return view('categories.show', compact('category'));
    /*
    Render this content in the view.
    @foreach($category->posts as $post)
      {{-- Display Post Content --}}
      @foreach($post->comments as $comment)
        {{-- Display Comment Content --}}
      @endforeach
    @endforeach
    */
}
0 голосов
/ 26 марта 2020

Вы создаете $comments переменную внутри foreach l oop, которая делает ее областью действия локально и не будет доступна за пределами foreach

Чтобы устранить эту ошибку, вам нужно определить переменную comments внутри вашей функции, чтобы она была доступна в вашей функции

public function show($id)
        {
            $comments = [];  // define it here
            $category = Category::find($id);
            if($category !== null) {
                $posts = $category->posts;

                foreach($posts as $post) {

                    $comments = $post->comments;
                }

            }

                return view('categories.show', compact('posts', 'category','comments'));
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...