我有三张桌子
物品
类别
和关系表articles_categories
该表是我使用规范化功能存储我的关系的地方。就像这样
我能够做选择,插入,更新,删除。这是我以前的问题 Insert , Update , Delete -> Normalization & Code Igniter Saving articles and related categories according to normalization
我现在想要实现的是我正在尝试通过类别创建文章列表。喜欢这个
Category Name
- article relating to that category
- article relating to that category
- article relating to that category
- article relating to that category
这是我的控制器
function category($id)
{
$data['title'] = "View by category";
$data['articles_categories']=$this->articles_categories_model->get_by_id($id);
$data['articles']=$this->articles_model->get();
$data['category_id']=$id;
$data['categories_list']=$this->categories_model->get();
$this->load->view('articles_pages/category',$data);
}
我的观点
<?php
//$category_id;
foreach($articles as $a)
{
foreach($articles_categories as $ac)
{
if($ac['categories_id']==$category_id && $a['id']==$ac['articles_id'])
{
echo $a['title'];
}
}
}
?>
我无法得到渴望的结果。请帮我。感谢
答案 0 :(得分:2)
由于类别方法将$id
作为参数,我将假设您只想显示单个类别的文章。
您当前正在返回您不想要的数据,然后在您的视图中将其过滤掉。这是低效的(并且随着文章数量的增加可能成为问题),并且它不是MVC编程的正确方法。我们应该专注于在模型中获取正确的数据并将其传递给视图,而不是返回每篇文章然后过滤数据。
控制器:
function category($id)
{
$data['title'] = "View by category";
$data['articles'] = $this->articles_model->get_articles_by_category(id);
$data['category_id']=$id;
$data['categories_list']=$this->categories_model->get();
$this->load->view('articles_pages/category',$data);
}
型号:
function get_articles_by_category($id)
{
$this->db->select('*');
$this->db->from('articles');
$this->db->join('articles_categories', 'articles.id = articles_categories.articles_id');
$this->db->where('articles_categories.categories_id', $id);
$query = $this->db->get();
return $query;
}
在上面我们使用articles_categories表加入articles表,允许我们从某个类别中获取文章。以上只是使用活动记录类的一个示例,但您可以随意使用您喜欢的样式重新编写它。