线程评论,php,laravel

时间:2016-07-28 13:11:55

标签: php laravel

这是我的表NewTheme_Comment:

    id
    parent_id
    id_theme
    user
    text
    upVotes
    downVotes

这是我的控制器:

class Comments extends Controller {

public function GenerateComments($id){
    $Comments = NewTheme_Comment::where('id_theme',  $id)->paginate(5);
    return view('comments', ['Comments'=>$Comments]);
}

ID 是指向一般帖子的链接(每个帖子都有不同的评论部分),因此动态点击用户,用户会被重定向到评论的('评论视图')部分因此。

所以我有数组注释,其中填充了NewTheme_Comment表中的值,对我来说问题包括如何使用这些值来创建Threaded Comments部分。

在我看来就是这样(问题是这会使评论部分像每个parent_id一样等于0而不是我要找的那样:

 @foreach ($Comments as $Comment) {{-- Comments threads --}}

<div class="media">
  <div class="media-left">
  </div>
  <div class="media-body">
    <p class="media-heading">{{ $Comment->text }}</p>
    <p class="media-heading">{{ $Comment->user }} / {{ $Comment->created_at }} </p>
  </div>
</div>


@endforeach {{-- Comments threads --}}

最终结果:

0 
1
2
3
2
1
1
0
1
0

我的想法是发表评论(使用parent_id):

   0
     1
      2
       3
      2
     1
     1
   0
     1
   0

但是我无法找到正确的方法来逻辑地执行此操作,因此最终看起来像一个简单的线程注释部分,与reddit使用相同(对于我的小型Web应用程序)。

如果我的方法很糟糕,我会非常感谢其他更好的方法来解决这个问题。

2 个答案:

答案 0 :(得分:2)

这是一个多步骤的解决方案。您应该更喜欢使用lazychaser/laravel-nestedset包,因为线程注释是嵌套集的形式。

反过来说,如果您想继续使用当前的方法,我的child模型中会有Comment函数,如下所示

public function children(){
   return $this->hasMany('App\Models\Comment', 'parent_id'); //Change as per your application architecture
}

然后在视图中,您可以通过递归调用部分视图来检查给定节点的子节点,包含

//print the details of $Comment
@foreach($Comment->children as $childComment)
   //call this partial view again for $childComment & print the details
@endforeach

答案 1 :(得分:1)

列出没有parent_id的每个评论,然后在加载评论时检查这些评论中是否有任何评论有孩子的评论并列出那些有缩进的评论。