Вот пример метода модели, который использует подход, который я обычно применяю для Предметов, у которых есть «подэлементы» ...
Обычно я строю их в многоуровневом массиве в модели следующим образом:.
Примечание. Эта модель возвращает сообщение или все сообщения с массивом связанных комментариев, доступных через свойство ->comments
.
function get_posts($id = NULL) {
//define optional id for single post
//if an id was supplied
if ( $id != NULL ) {
$this->db->where('id',$id);
}
// execute query
$query = $this->db->get('posts');
//make sure results exist
if($query->num_rows() > 0) {
$posts = $query->result();
} else {
return FALSE;
}
//create array for appended (with comments) posts
$appended_posts_array = array();
//loop through each post
foreach ($posts as $post) {
//get comments associated with the post
$this->db->where('post_id', $post->id)
$comments = $this->db->get('comments');
//if there are comments, add the comments to the post object
if($comments->num_rows() > 0) {
$post->comments = $comments;
}
else {
$post->comments = array();
}
//rebuild the returned posts with their comments
$appended_posts_array[] = $post;
}
//if post id supplied, only return the single post object
if ($id != NULL) {
return $appended_registration_array[0];
}
else {
return $appended_registration_array;
}
}
Сейчас вконтроллер ...
function posts() {
//load the model
$this->load->model('model_name');
//call the model method
$data->posts = $this->model_name->get_posts();
//load the view
$this->load->view('view/file', $data);
}
Затем в представлении вы можете использовать вложенный foreach для циклического просмотра постов и комментариев
<? foreach($posts as $post): ?> //posts foreach start
<h1><?= $post->title ?></h1> //post title
<p><?= $post->body ?></p> //post body
<? foreach($post->comments as $comment): ?> //comments foreach start
<h3><?= $comment->author ?></h3> //comment author
<p><?= $comment->body ?></h3> //comment body
<? endforeach; ?> // end comments foreach
<? endforeach; ?> // end posts foreach
Обратите внимание, что после создания массива постовкак я показал в модели, для каждого элемента $ post у вас есть $ post-> comments, который представляет собой просто массив комментариев, связанных с этим сообщением, поэтому, зная, что вы можете вызвать count($post->comments)
в контроллере или представлениичтобы получить количество комментариев, относящихся к одному сообщению.
Так что для вашего вопроса о просто отображении счетчика, в представлении единственное изменение состоит в том, что вы не будете перебирать все комментарии, вы простосделай это вместо этого ...
<? foreach($posts as $post): ?> //posts foreach start
<h1><?= $post->title ?></h1> //post title
<p><?= count($post->comments) ?></p> //comment count
<? endforeach; ?> // end posts foreach
РЕДАКТИРОВАТЬ: Я добавил необязательный параметр $id
в метод модели, так что если вы хотите, вы можете указать один пост, если хотите, передаваяэто идентификатор метода.Таким образом, этот же метод модели можно повторно использовать для подробного отображения отдельных сообщений, а также отображения всех комментариев.