CI Datamapper:迭代父子

时间:2013-10-23 12:32:55

标签: php mysql codeigniter codeigniter-datamapper

我有类别和帖子。 我想列出所有类别(父母)和所有相关帖子(孩子)。没有嵌套集,复杂查询。建立了关系。

正如我在文档中记载的那样:

$categories = new Category();

foreach( $categories->get() as $category )
{
   echo $category->name;

   foreach( $category->post->get() as $post)
   {
       echo $post->title;
   }

}

现在,如果我有千个类别,它将对每个类别进行查询。

这种情况下的最佳做法是什么?

  1. 为帖子和类别创建两个查询,并使用php将它们合并到一个树中?
  2. 加入两个表,一个查询并用php创建树?
  3. 有人明智的想法:)

1 个答案:

答案 0 :(得分:1)

我会创建一个专用的模型方法来检索你想要的数据,然后我会批量检索它(用于分页)。在我使用一些示例代码进入想法之前,核心概念是您有两个表,您通过 INNER JOIN 语句链接,并且您批量限制您的选择。然后,您可以像在视图中一样显示数据。

假设你有一个类别表,它看起来像这样:

  • ID
  • 名称

我们还说你有一个帖子表,看起来像这样:

  • ID
  • 名称
  • CATEGORY_ID

我现在基本上会检索您需要的条目,但也会限制我的结果。

$this->db->select('*');
$this->db->from('category');
$this->db->join('post', 'post.category_id = category.id', 'inner');
$this->db->limit($limit, $offset);
$query = $this->db->get();

当您必须显示大量数据时,分页会为您节省时间。但是,如果您必须一次显示所有数据,请考虑使用 Memcached Gearman 或类似的缓存技术,以便获得更好的性能。