2016-09-19 6 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; 
    } 
    ?> 
    

    ビューファイルの上に上記のコードを入れてください。今あなたのコメントと返信を表示/エコーしたいと思う次の行を使用してください。

    <?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. ループを返信するとコメントの返信のためにそれを
    +0

    あなたは私の質問を理解しないでください – arinze

    +0

    私は前の擬似コードの実際のコードを追加しました。私はあなたと答え@ user3360140を与えようとしていた答えはあなたに同じbtwを与えています。 – 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を使用しました。それは、タイプについてご迷惑をおかけしているデータ – arinze

    +0

    です。それを修正しました –

    +0

    新しい "オブジェクトのプロパティを取得しようとしていません"。 – arinze

    関連する問題