2012-01-03 5 views
0

기본적으로 주석 시스템을 구축하려고합니다. 사용자는 사이트의 사진을보고 다른 회원이 작성한 모든 댓글을 볼 수 있습니다.Codeigniter의 foreach 루프 내에서 쿼리 실행

각 댓글은 foreach (현재 잘 작동 함)를 사용하여 반복되지만, 내가 수행해야하는 것은 각 댓글에 대해 별도의 쿼리를 실행하여 게시 한 사용자의 사용자 세부 정보를 얻는 것입니다. 이러한 세부 정보는 별도의 데이터베이스에 저장됩니다 (그렇지 않으면 그냥 조인 할 것입니다).

public function get_comment($id) 
{ 
    $db_photos = $this->load->database('photos', TRUE); 
    $db_photos->select('id, comment, userid, photoid'); 
    $db_photos->from('comments'); 
    $db_photos->where('photoid', $id); 

    return $db_photos->get()->result(); 
} 

을 그리고 여기 컨트롤러의 :

내 모델은 지금까지이있다 내가 잡아 할 필요가 그래서 기본적으로

<?php foreach ($comment as $comments): ?> 
     <div class="ViewPhoto-CommentsBox"> 
     <? echo $comments->comment; ?> 
     </div> 
     <?php endforeach ?> 

:

public function view($id) 
    { 

     $data['comment'] = $this->viewphoto_model->get_comment($id); 
     if (empty($data['comment'])) { show_404(); } 

     $this->load->view('templates/header', $data); 
     $this->load->view('viewphoto/viewphoto', $data); 
     $this->load->view('templates/footer', $data); 
    } 

다음보기 각 댓글에서 'userid'값을 가져온 다음 'users'데이터베이스에 대한 쿼리를 실행하여 게시 된 각 댓글에 대한 사용자 세부 정보를 가져옵니다.

어떤 도움이 가장 감사합니다 :)

편집 :

가 여전히 작동하지 않는, 여기에 최신 버전입니다.

컨트롤러 :

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class Viewphoto extends CI_Controller { 


    public function __construct() 
    { 
     parent::__construct(); 
     $this->load->model('viewphoto_model'); 
    } 


    public function view($id) 
    { 
     $data['photo'] = $this->viewphoto_model->get_photo($id); 
     if (empty($data['photo'])) { show_404(); } 

     $data['user'] = $this->viewphoto_model->get_user($data['photo']->userid); 
     if (empty($data['user'])) { show_404(); } 


     $comment = $this->viewphoto_model->get_comment($id); 
     if($comment->num_rows() > 0) 
      { 
       foreach ($comment->result() as $r) 
       { 
        $data['reg'][$i]['comment']=$r->comment; 
        $data['reg'][$i]['id']=$r->id;   

        // Get user details from user table 
        $user_profile = $this->viewphoto_model->get_comment_user($r->userid); 
        if($user_profile->num_rows() > 0) 
        { 
         foreach ($user_profile->result() as $row) 
         { 
          // user details whatever you have in your db. 
          $data['reg'][$i]['id']=$row->id; 
          $data['reg'][$i]['firstname']=$row->firstname; 
          $data['reg'][$i]['lastname']=$row->lastname; 
         } 
        } 

        $i++; 
       } 
      } 

     $data['title'] = $data['photo']->title.' by '.$data['user']->firstname.' '.$data['user']->lastname; 
     $data['meta_description'] = $data['photo']->description; 
     $data['directory'] = 'sub'; 

     $this->load->view('templates/header', $data); 
     $this->load->view('viewphoto/viewphoto', $data); 
     $this->load->view('templates/footer', $data); 
    } 
} 

모델 :

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class Viewphoto_model extends CI_Model { 


    public function get_photo($id) 
    { 
     $db_photos = $this->load->database('photos', TRUE); 
     $db_photos->select('*'); 
     $db_photos->select("DATE_FORMAT(uploaddate, '%d/%m/%y') as uploaddate_formatted", FALSE); 
     $db_photos->from('photos'); 
     $db_photos->where('approved', '1'); 
     $db_photos->where('id', $id); 

     return $db_photos->get()->row(); 
    } 

    public function get_user($userid) 
    { 
     $db_users = $this->load->database('users', TRUE); 
     $db_users->select('id, firstname, lastname, email, type, type_staff, count_approved, count_sales, count_comments, count_editorial, featured, subscriber'); 
     $db_users->from('useraccounts'); 
     $db_users->where('id', $userid); 

     return $db_users->get()->row(); 
    } 


    public function get_comment($id) 
    { 
     $db_photos = $this->load->database('photos', TRUE); 
     $db_photos->select('id, comment, userid, photoid'); 
     $db_photos->from('comments'); 
     $db_photos->where('photoid', $id); 

     return $db_photos->get()->result(); 
    } 


    public function get_comment_user($userid) 
    { 
     $db_users = $this->load->database('users', TRUE); 
     $db_users->select('id, firstname, lastname'); 
     $db_users->from('useraccounts'); 
     $db_users->where('id', $userid); 

     return $db_users->get(); 
    } 

} 

전망 :이 같은

<?php foreach ($reg as $comments): ?> 
     <div class="ViewPhoto-CommentsBox"> 
     <? echo $comments['comment']; ?> by <? echo $comments['firstname'];?> 
     </div> 
     <?php endforeach ?> 
+0

나는 codeigniter에 대한 경험이 없지만 루프 내에서 쿼리하는 것은 일반적으로 나쁜 생각이라고 생각합니다. 개인적으로는 사용자가 세부 정보를 얻는 것처럼 주석을 넣은 다음 중첩 루프를 사용하여 두 개를 조인합니다. –

+0

루프를 쿼리하는 이유는 사용자가 자신의 사용자 정보를 변경하면 사이트 전체에서 발생한 모든 주석에 대해 변경되기 때문입니다. 동적으로 변경되지 않기 때문에 코멘트 데이터베이스의 각 행에 사용자 세부 정보를 넣을 수 없습니다. 그들이 세부 사항을 변경할 때를 제외하고는 전체 데이터베이스의 모든 주석을 변경하기 위해 뭔가를 작성하지만, 약간 미친 듯합니다. –

+0

안녕하세요, 당신이 내가 말한 것을 잘못 해석했다고 생각합니다. 어쨌든 데이터/데이터베이스를 변경하지 말고 오히려 컨트롤러에서 두 모델을 구해서 적절히 반복 할 수있는 뷰로 파싱하십시오.또는 다른 DB에서 정보를 얻거나 매핑하기 위해 주석 모델과 함께 플레이하십시오. –

답변

2

변화 컨트롤러.

public function view($id) 
     {  
       $comment= $this->viewphoto_model->get_comment($id); 

       if($comment->num_rows() > 0) 
       { 
        foreach ($comment->result() as $r) 
        { 
         $data['reg'][$i]['comment']=$r->comment; 
         $data['reg'][$i]['id']=$r->id;   

         // Get user details from user table 
         $user_profile=$this->viewphoto_model->get_user_profile_details($r->userid); 
         if($user_profile->num_rows() > 0) 
         { 
          foreach ($user_profile->result() as $row) 
          { 
           // user details whatever you have in your db. 
           $data['reg'][$i]['name']=$row->name; 
           $data['reg'][$i]['gender']=$row->gender; 
           $data['reg'][$i]['phone_no']=$row->phone_no; 
          } 
         } 

         $i++; 
        } 
       } 
      $this->load->view('templates/header', $data); 
      $this->load->view('viewphoto/viewphoto', $data); 
      $this->load->view('templates/footer', $data); 
     } 

파일보기 : 아래에서와 같은 세부 정보를 사용할 수 있습니다.

<?php if(isset($reg)) { foreach ($reg as $comments): ?> 
     <div class="ViewPhoto-CommentsBox"> 
     <? echo $comments['comment']; ?> 
     <? echo $comments['name']; // user detail ?> 
     </div> 
     <?php endforeach ?> 
     <? } ?> 
+0

음 ... 잘 보이지만 작동하지 않는 것 같습니다. 빈 화면이 나타납니다. 원래 컨트롤러와 모델로 원래 질문을 업데이트했습니다. –

+0

모델 함수 get_comment()가 변경되었습니다. return $ db_photos-> get(); return 대신 $ db_photos-> get() -> result(); – srbhbarot

+0

지금 나는 다음과 같은 오류가 발생합니다 : 메시지가 나타납니다 : PHP는 오류가 심각도가 발생했다 정의되지 않은 변수를 : 나는 파일 이름 : 컨트롤러/viewphoto.php 라인 번호 : (27) 또한 라인 (28)에 대해 하나뿐만 아니라, 같은 오류. –

0

! :

$searchquery = "SELECT * FROM your_table"; 
     $resultquery = $this->db->query($searchquery); 
     $i = 0; 
     if($resultquery->num_rows() > 0) 
       { 
        foreach ($resultquery->result() as $query) 
        { 
         $data['reg'][$i]['id']=$query->id; 
         $data['reg'][$i]['name']=$query->name; 
         $data['reg'][$i]['pers']=$query->pers; 
         $data['reg'][$i]['sex']=$query->sex; 
         $i++; 
        } 
      } 

그리고 뷰에 대한

:

<?php if(isset($reg)) { foreach ($reg as $chambres): ?> 
        <li> 
         <input type="hidden" value="<?php echo $query['id']; ?>" /> 
         <input type="text" value="<?php echo $query['name']; ?>" placeholder="numero de la chambre" /> 
         <input type="text" value="<?php echo $query['pers']; ?>" placeholder="Nombre de personne" /> 
         <textarea><?php echo $query['sex']; ?></textarea> 
        </li> 
       <?php endforeach ?> 
       <?php } ?> 

감사 srbhbarot.

관련 문제