laravel 我想显示每个帖子的评论

zxlwwiss  于 2023-02-14  发布在  其他
关注(0)|答案(3)|浏览(163)

你好,我刚从php本地移动,想尝试在laravel的关系,所以我想显示一个职位和每个评论和用户谁的意见,以便当循环后有一个评论,有一个关系。
这是我的博客

public function index() {
        
        $posts = Post::all();
        $comment = Comment::all();
        
        
        return view('home', [
            'posts' => $posts,
            'comments' =>  $comment
        ]);
}

我的博客. php:

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

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

我的评论:

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

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

我的用户. php:

public function post() {
        return $this->hasMany(Post::class);
    }

我的主页. php:

@foreach ($posts as $post)
        <div class="box-post">
          <p>{{ $post->user->name }}</p>
          <p>{{ $post->post_content}}</p>
          <a href="/comment/{{ $post->id }}"><button>Comment</button></a>
        </div>

        @foreach ($comments as $comment)
           <div class="box-post">{{ $comment->comment_content }} </div>
        @endforeach
@endforeach

上面的代码运行时,帖子和作者沿着显示,但所有评论也出现在所有帖子中,我搜索了引用并尝试在Controller中更改评论值,但结果仍然相同,因此我使评论出现在每个帖子中 * $comment = Comment::all();
我想要的是显示帖子和与每个帖子相关的评论,就像twitter功能一样,可以回复人们的tweet。
谢谢你

of1yzvn4

of1yzvn41#

public function index() {
        
        $posts = Post::with('comments')->get();
        
        
        
        return view('home', [
            'posts' => $posts,
            
        ]);
}

然后在叶片中

@foreach ($posts as $post)
        <div class="box-post">
          <p>{{ $post->user->name }}</p>
          <p>{{ $post->post_content}}</p>
          <a href="/comment/{{ $post->id }}"><button>Comment</button></a>
        </div>

        @foreach ($post->comments as $comment)
           <div class="box-post">{{ $comment->comment_content }} </div>
        @endforeach
   @endforeach
50pmv0ei

50pmv0ei2#

您在构建模型及其关系方面做得很好。
我建议您更改调用post query的方式。

public function index(Request $request) {
        
        // add eager loading comments for each post and user
        $posts = Post::with('comments', 'user')->get();
        // eager loading user is needed, cause in blade you call $post->user->name
        // calling comments will no longer needed
  
        // return only $posts
        return view('home', compact('posts'));
}

在你的刀片服务器里,你可以调用每个帖子的评论,就像这样。

@foreach ($posts as $post)
        <div class="box-post">
          <p>{{ $post->user->name }}</p>
          <p>{{ $post->post_content}}</p>
          <a href="/comment/{{ $post->id }}"><button>Comment</button></a>
        </div>

        @foreach ($post->comments as $comment)
           <div class="box-post">{{ $comment->comment_content }} </div>
        @endforeach
@endforeach

就是这样,如果使用barryvdh/laravel-debugbar,您将看到只运行了3个查询,每个查询来自表帖子、评论和用户。
对于备注查询和用户查询,不会取到所有行,
仅与从第一个查询获取的帖子相关。
祝您使用Laravel框架愉快!
您的PHP原生知识/专业技能将非常有用,并加快您的学习/掌握过程。

omhiaaxx

omhiaaxx3#

你的关系建立得很好,所以只需简单地使用$post->comments就可以得到每个帖子相关的所有评论。

@foreach ($posts as $post)
        <div class="box-post">
          <p>{{ $post->user->name }}</p>
          <p>{{ $post->post_content}}</p>
          <a href="/comment/{{ $post->id }}"><button>Comment</button></a>
        </div>

        @foreach ($post->comments as $comment) // make changes here
           <div class="box-post">{{ $comment->comment_content }} </div>
        @endforeach
@endforeach

相关问题