1

我有三张桌子

文章 在此处输入图像描述

类别

在此处输入图像描述

和关系表articles_categories

在此处输入图像描述

该表是我使用规范化功能存储我的关系的地方。像这样 在此处输入图像描述

我能够选择、插入、更新、删除。这是我之前的问题 Insert , Update , Delete -> Normalization & Code Igniter Saving articles and related categories 按照规范化

我现在想要实现的是我正在尝试通过类别创建文章列表。像这样

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'];
            }
        }
    }
?>

我无法得到想要的结果。请帮我。谢谢

4

1 回答 1

3

由于 category 方法将 an$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 表和articles_categories 表,允许我们从某个类别中获取文章。上面只是一个使用 active-record 类的例子,但你可以随意用你喜欢的风格重写它。

于 2013-05-31T03:55:23.637 回答