0

Whatsup codeigniters!codeigniterで作成しているブログの合計コメントを表示したいと思います。私のコントローラーには次のものがあります。

   function index() {

          $data['query'] = $this->blog_model->get_all_entries();
          $this->load->view('blog/index',$data);
   }

関数index()はすべての投稿を取得します。そして、私が持っています

  public function post($id) {
          $data['query'] = $this->blog_model->get_post($id);
          $data['comments'] = $this->blog_model->get_post_comment($id);
          $data['post_id'] = $id;
          $data['total_comments'] = $this->blog_model->total_comments($id);
          $this->load->view('blog/index',$data,TRUE);

          $this->load->helper('form');
          $this->load->library(array('form_validation','session'));
          //validation rules for post function

          $this->form_validation->set_rules('commentor','Name','required');
          $this->form_validation->set_rules('email','Your email','required|valid_email');
          $this->form_validation->set_rules('comment','Comment','required');

          if($this->blog_model->get_post($id))
          {
                 foreach($this->blog_model->get_post($id) as $row) 
                 {
                        //set page title
                        $data['title'] = $row->entry_name;
                 }
                 if($this->form_validation->run() == FALSE)
                 {
                        //if validation runs FALSE
                        $this->load->view('blog/post',$data);
                 }
                 else
                 {
                        //if valid
                        $name = $this->input->post('commentor');
                        $email = strtolower($this->input->post('email'));
                        $comment = $this->input->post('comment');
                        $post_id = $id;

                        $this->blog_model->add_new_comment($post_id,$name,$email,$comment);
                        $this->session->set_flashdata('message', '1 new comment added!');
                        redirect('blog/post/'.$id);
                  }
           }
           else
                  show_404();
   }

基本的に、post($ id)はid(単一の投稿)の投稿を取得し、コメントを表示します。コメントの総数を1つの投稿に印刷できます。しかし、すべての投稿がリストされているindex()関数にコメントの総数を出力するにはどうすればよいですか?ありがとうございました!

4

2 に答える 2

0

モデルでこのようなことをしてみてください

public function fetch_all_comment()
{
      $query = $this->db->get('comments');
      return $query->result();
}

コントローラ内

$data['all_comments'] = $this->model_name->fetch_all_comment();
 $this->load->view('viewname',$data);

ビューで

このためには、ビューでモデルを呼び出す必要があります。たとえば、投稿名を表示する場合です。

モデルを表示にロード

  foreach ($all_comments as $row)
        {
            echo $row->post;
          echo $total_no_post = $this->model_name->fetch_total_no_of_comment_in_post($row->postid);
        }

この関数のコメント数をカウントしますfetch_total_no_of_comment_in_post

于 2012-09-03T09:16:05.270 に答える
0

このアクティブレコードを使用する

$this->db->select("post_id , count(comment) as total_comments");    
$this->db->group_by('post_id');
$query = $this->db->get('comments');

これにより、このSQLクエリが生成されます

SELECT 
     post_id,
     count(comment) as total_comments
FROM comments
GROUP BY post_id

これは、投稿を選択し、コメントごとに投稿の数を数え、投稿ごとに分けることを意味します。理解のためにここにテーブル構造があります

Comments
id    count(comment)    post_id    

これで、クエリは最初にすべてのコメントをフェッチし、次にgroup byを使用して投稿を分離し、各投稿の合計コメントを提供します。

于 2012-09-03T09:52:40.377 に答える