Laravel 5: получить комментарии - PullRequest
0 голосов
/ 02 октября 2019

Я создаю систему комментирования блогов.

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

В моем контроллере результатов я выполнил

дд ($ post-> комментарии);

Но я не могу получить какие-либо комментарии из своей базы данных.

Я добавил четыре комментария к записи. И пользователь может ответить на каждый комментарий.

таблица миграции

Schema::create('comments', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->integer('user_id');
        $table->integer('post_id');
        $table->text('body');
        $table->integer('comment_id')->nullable();
        $table->timestamps();
    });

Comment.php

public function posts()
{
    return $this->belongsTo(Post::class);
}

public function user()
{
    return $this->belongsTo(User::class);
}

public function replies()
{
    return $this->hasMany(Comment::class, 'comment_id')->whereNotNull('comment_id');
}

Post.php

 public function comments()
{
    return $this->hasMany(Comment::class)->whereNull('comment_id');
}

User.php

public function comments()
{
    return $this->hasMany(Comment::class);
}

Mysql I seeded 4 comments to a post(id=52)

ResultsController.php

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

    $posts['particular_post'] = $particular_post;
    $posts['recommended_posts'] = $recommended_posts;

    dd($post->comments);

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

http://127.0.0.1:8000/results/52 Это URLкоторый должен получить комментарии.

1 Ответ

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

Инъекции метода работают только тогда, когда переменная в отображении маршрута и аргумент для функции имеют одно и то же имя, вам также нужно только принять само сообщение в качестве аргумента, вам не нужны ни сообщение, ни идентификаторit.

Измените вашу show функцию следующим образом:

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;

    dd($post->comments);

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

И затем убедитесь, что переменная в отображении маршрута имеет то же имя, что и аргумент show, то есть:

Route::get('results/{post}', 'ResultsController@show');
...