기본적으로 주석 시스템을 구축하려고합니다. 사용자는 사이트의 사진을보고 다른 회원이 작성한 모든 댓글을 볼 수 있습니다.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 ?>
나는 codeigniter에 대한 경험이 없지만 루프 내에서 쿼리하는 것은 일반적으로 나쁜 생각이라고 생각합니다. 개인적으로는 사용자가 세부 정보를 얻는 것처럼 주석을 넣은 다음 중첩 루프를 사용하여 두 개를 조인합니다. –
루프를 쿼리하는 이유는 사용자가 자신의 사용자 정보를 변경하면 사이트 전체에서 발생한 모든 주석에 대해 변경되기 때문입니다. 동적으로 변경되지 않기 때문에 코멘트 데이터베이스의 각 행에 사용자 세부 정보를 넣을 수 없습니다. 그들이 세부 사항을 변경할 때를 제외하고는 전체 데이터베이스의 모든 주석을 변경하기 위해 뭔가를 작성하지만, 약간 미친 듯합니다. –
안녕하세요, 당신이 내가 말한 것을 잘못 해석했다고 생각합니다. 어쨌든 데이터/데이터베이스를 변경하지 말고 오히려 컨트롤러에서 두 모델을 구해서 적절히 반복 할 수있는 뷰로 파싱하십시오.또는 다른 DB에서 정보를 얻거나 매핑하기 위해 주석 모델과 함께 플레이하십시오. –