Laravel 5 vue.js: свойство или метод "comment" не определен в экземпляре, но на него ссылаются во время рендеринга - PullRequest
1 голос
/ 03 октября 2019

Я создаю систему комментирования, используя vue.js и laravel5.8.

Я сделал с моделями и посевом, поэтому у меня сейчас 10 комментариев к одному сообщению (id 51).

Но я получил эту ошибку,

Свойство или метод "comment" не определены в экземпляре, но на них ссылаются во время визуализации

и

Невозможно прочитать свойство 'user' из неопределенного

У меня проблемы с извлечением данных.

Я создал новую конечную точку для функции комментария. web.php

Route::get('results/{post}', 'ResultsController@show')->name('posts.show');
Route::get('results/{post}/comments', 'CommentsController@index');

Я хочу показать комментарии в show.blade.php.

ResultsController.php

 public function show(Post $post)
{
    $recommended_posts = Post::latest()
                        ->whereDate('date','>',date('Y-m-d'))
                        ->where('category_id','=',$post->category_id)
                        ->where('id','!=',$post->id)
                        ->limit(7)
                        ->get();

    $posts['particular_post'] = $post;
    $posts['recommended_posts'] = $recommended_posts;
    $post->comments()->with('user')->get();

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

show.blade.php

<comments-component :post="{{ $posts['particular_post']->comments }}"></comments-component>

comments.vue

<div class="reply-comment" :v-for="comment in comments">
                     <div class="user-comment" >
                        <div class="user">
                            <!--<img src="" alt="" >-->
                            <avatar :username="comment.user.name" :size="30" ></avatar>
                        </div>
                        <div class="user-name">
                            <span class="comment-name">{{ comment.user.name }}</span>
                            <p> {{ comment.body }} </p>
                        </div>
                    </div>
                    <div class="reply">
                        <div class="seemorecomments">
                            <a href="">see more</a>
                        </div>
                        <button class="reply-button">
                            <i class="fas fa-reply"></i>
                        </button>
                    </div>
                </div>
<script>
import Avatar from 'vue-avatar'
export default {
    props: ['post'],
    components: {
        Avatar
    },
    mounted() {
        this.fetchComments()
    },
    data: () => ({
        comments: {
            data: []
        }
    }),
    methods: {
        fetchComments() {
            axios.get(`/results/${this.post.id}/comments`).then(({data}) => {
                this.comments = data
            })
        }
    }
}

CommentsController.php

public function index(Post $post)
{
    return $post->comments()->paginate(5);
    $post->comments()->with('user')->get();
}

comment.php

protected $with = ['user'];

Я не могуполучить объект данных здесь. enter image description here

1 Ответ

1 голос
/ 03 октября 2019

В пределах axios вам может потребоваться доступ к data из полученного ответа (см. console.log примеры здесь ), попробуйте выполнить следующее в вашем comments компоненте:

methods: {
    fetchComments() {
        axios.get(`/results/${this.post.id}/comments`).then((response) => {
            this.comments = response.data.data
        })
    }
}

Примечание: используется response.data.data.

Я предполагаю, что возвращение ->paginate() поместит результаты в ключ data в возвращаемом массиве. Если нет, то просто используйте response.data.

Кроме того, в контроллере для получения комментариев измените на следующее:

public function index(Post $post)
{
    return $post->comments()->with('user')->paginate(5);
}

Это будет загружать пользователей запрашиваемыми комментариями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...