在 CodeIgniter 中根据 pivot table 的类别 ID 显示帖子
Display posts according to category ID from pivot table in CodeIgniter
我目前有三个这样的 table:
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) 应该可以显示与存储在 [= 中的已点击类别相匹配的所有帖子51=] table 并在 ci_terms table 中创建,但即使在 ci_posts 和 ci_terms ci_relationship table.
谁能解释一下我的错误在哪里?
更新这是我访问它们的方式:
<?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; ?>
这是我的 Post 控制器中的分类方法:
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 table 上时:
// 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方法
提前致谢
希望对您有所帮助:
你的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;
}
}
我目前有三个这样的 table:
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) 应该可以显示与存储在 [= 中的已点击类别相匹配的所有帖子51=] table 并在 ci_terms table 中创建,但即使在 ci_posts 和 ci_terms ci_relationship table.
谁能解释一下我的错误在哪里?
更新这是我访问它们的方式:
<?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; ?>
这是我的 Post 控制器中的分类方法:
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 table 上时:
// 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方法
提前致谢
希望对您有所帮助:
你的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;
}
}