Отображать сообщения в соответствии с ID категории из сводной таблицы в CodeIgniter

В настоящее время у меня есть три таблицы, как это:

ci_posts: id, title, slug, content.

ci_terms: term_id, title, slug.

ci_relationship: id, post_id, term_id

Я пытаюсь получить все сообщения в соответствии с определенной категорией.

Это мой метод, который я использую в своей модели, но я не могу заставить его работать так, как я хочу:

public function get_posts_category($id){

$this->db->select('*');
$this->db->from($this->table);
$this->db->join('ci_relationship', 'ci_relationship.post_id = ci_posts.id', 'INNER');
//$this->db->join('ci_users', 'ci_users.id = ci_relationship.id', 'INNER');
//$this->db->join('ci_terms', 'ci_relationship.term_id = ci_terms.term_id', 'INNER');
$this->db->order_by('post_id', 'DESC');
$this->db->group_by('post_id');
//$this->db->where('type', 'category');
$this->db->where('term_id', $id);

$query = $this->db->get();

if($query->num_rows() >= 1){
return $query->result();
} else {
return false;
}

}

Как и во фрагменте выше, $ this-> db-> where (‘term_id’, $ id) должно позволять отображать все сообщения, которые соответствуют категории, по которой щелкнули, которая хранится в таблице ci_relationship и создается в таблице ci_terms, но текущий вывод ничего не показывает, даже если в таблице ci_relationship есть несколько ci_posts и ci_terms, связанных друг с другом.

Может кто-нибудь объяснить мне, где моя ошибка?

ОБНОВЛЕНИЕ ЭТО, КАК Я ДОСТУП К ИМ:

<?php if($categories) : ?>
<div class="panel panel-default">
<div class="panel-heading">
<h1 class="panel-title">Categories</h1>
</div>
<div class="panel-body">
<?php foreach($categories as $cats) : ?>
<a href="<?= base_url('posts/category/'.get_category_slug($cats->term_id)) ?>"><span class="label label-orange"><?= get_category($cats->term_id); ?></span></a>
<?php endforeach; ?>
</div>
</div>
<?php endif; ?>

Это мой метод категории в моем контроллере почты:

    public function category($id){

$data['posts'] = $this->Post_model->get_posts_category($id);
$category = $this->Terms_model->get($id);

// Get Categories
$data['categories'] = $this->Post_model->get_categories();

// Meta
//      $data['title']  = $this->settings->title.' | '. ucfirst($category->title);

// Load template
$this->template->load('public', 'default', 'posts/category', $data);
}

Это метод в контроллере для получения тегов, когда они существуют в таблице ci_relationship ниже:

// Get categories
public function get_categories(){

$this->db->select('*');
$this->db->from('ci_relationship');
$this->db->group_by('term_id');
$this->db->where('type', 'category');

$query = $this->db->get();

if($query->num_rows() >= 1){
return $query->result();
} else {
return false;
}

}

но приведенный выше код только для отображения, фактическая функция для отображения сообщений в соответствии с выбранной категорией по-прежнему является методом get_posts_category.

заранее спасибо

0

Решение

Надеюсь, что это поможет вам :

Ваш get_posts_category должно быть так:

public function get_posts_category($id)
{

$this->db->select('*, count(ci_posts.id)');
$this->db->from('ci_posts');
$this->db->join('ci_relationship', 'ci_relationship.post_id = ci_posts.id');
//$this->db->join('ci_users', 'ci_users.id = ci_relationship.id', 'INNER');
//$this->db->join('ci_terms', 'ci_relationship.term_id = ci_terms.term_id', 'INNER');
$this->db->order_by('ci_posts.id', 'DESC');
$this->db->group_by('ci_posts.id');
//$this->db->where('type', 'category');
$this->db->where('ci_relationship.term_id', $id);

$query = $this->db->get();

if($query->num_rows() > 0)
{
return $query->result();
}
else
{
return false;
}
}
1

Другие решения

Других решений пока нет …