2016-09-19 203 views
4

我想显示评论和回复,但我真的不知道该怎么做。这是我的桌子。显示评论和回复?

comment_id | byy | user_comment | topic_id | parent_id | 
    1  |obi |comment 1  | 1  | 0  | 
    2  |chima |comment 2  | 1  | 0  | 
    3  |eze |comment 1 reply | 1  | 1  | 
    4  |david |comment 2 reply | 1  | 2  | 

我编写的这段代码只是显示评论,但我想评论显示评论的回复,如果有的话。在显示下一条评论前

<?php 
    $querycomment = comment::find()->where(['topic_id'=> Yii::$app->getRequest()->getQueryParam('id')])->all(); 

    foreach ($querycomment as $detail) { 
    if($detail['parent_id']==0) { 
     echo 'Country Name: '.$detail['user_comment'].'</br>'; 
     echo 'State Name: '.$detail['byy'].'</br>'; 
     echo 'City Name: '.$detail['name'].'</br>'; 
     echo '</br>'; 
    } 
    } 
?> 
+0

对评论进行回复,是否有任何最大深度级别都在那里,否则将会是不定式的? –

+0

它应该是可扩展的 – arinze

回答

0

这里是以下pseudocode的实际代码:

<?php 
// print comments and/or replies body 
function print_comments($topic_id, $parent_id) { 
    $all_comments = Comment::find() 
       ->where(
        'topic_id' => $topic_id, 
        'parent_id' => $parent_id 
       )->all(); 

    if(empty($all_comment)) { 
     return ""; 
    } 

    $comments = '<ul>'; 
    foreach($all_comments as $comment) { 
     $comments .= '<li> 
      <p> '.$comment->user_comment.' </p> 
      <p> by: '.$comment->byy.' </p>'; 

      // print replies 
      $comments .= print_comments($topic_id, $comment->comment_id); // recursive 

     $comments .= '</li>'; 
    } 
    $comments .= '</ul>'; 

    return $comments; 
} 
?> 

把上面的代码在你的视图文件的顶部。现在使用tho下面的行你想显示/回应你的评论和回复。

<?php echo print_comments(Yii::$app->getRequest()->getQueryParam('id'), 0); ?> 

(前面的答案)

你可以试着遵循这个pseudocode

print_comments(queryParam(id), 0); // parent_id = 0 

// print comments and/or replies body 
print_comments ($topic_id, $parent_id) { 
    $all_comments = Comment::find() 
       ->where(
        topic_id => $topic_id, 
        parent_id => $parent_id 
       )->all(); 

    if($all_comment count = zero) 
     return 

    <ul> 
    foreach($all_comments as $comment) { 
     <li> 
      <p> $comment->user_comment </p> 
      <p> by: $comment->byy </p> 

      // print replies 
      print_comments($topic_id, $comment->comment_id); // recursive 

     </li> 
    } 
    </ul> 
} 

优点:更容易理解和执行。
缺点:使用了很多查询。

任何其他方式来克服缺点?
请记住,当与分页一起使用时,这种做法很难实现。

  1. 使用单一查询来获取所有评论和回复
  2. 格式所有的人都发表意见=>回复关系
  3. 遍历的关系,并显示
+0

你不明白我的问题 – arinze

+0

我已经添加了以前的伪代码的实际代码。我试图给你的答案和@ user3360140给你的答案同样是顺便说一句。 – leninhasda

+0

我觉得很愚蠢。你的回答是对的。我怎样才能使回复右移 – arinze

3

我不熟悉Yii。但你可以使用递归来实现这一点。试图实现sometihng类似如下:

function show_replies($parent_id = 0, $level = 0) { 
    $query = "select * from comments where parent_id = $parent_id"; 
    $result = mysql_query($query); 
    if (!$result || !mysql_num_rows($result)) { 
     return; 
    } 

    while($detail = mysql_fetch_array($result)) { 
     $space =''; 
     for ($i = 0; $i < $level; $i++) { 
      $space .= "--"; 
     } 

     echo $space.'Country Name: '.$detail['user_comment'].'</br>'; 
     echo $space.'State Name: '.$detail['byy'].'</br>'; 
     echo $space.'City Name: '.$detail['name'].'</br>'; 
     show_replies($detail['comment_id'], $level + 1); 
    } 
} 

show_replies(); 
+0

mysql_query已被弃用,所以我用mysqli。它对sqay什么是数据 – arinze

+0

对此类型感到抱歉。修正它 –

+0

新的“错误尝试获取非对象的属性”。它引导我到$ detail-> id line – arinze