2011-01-05 60 views
0

我进入CodeIgniter并试图找出我的模型的良好体系结构。您将创建下列简单的例子,什么样的车型:博客条目如何在CodeIgniter中使用模型?

  • 列表页:显示所输入的数据的一部分,评论数
  • 博客条目页面:显示所有的条目数据,评论列表(有评论数据的一部分)
  • 评论页:显示我想要得到这个权利,这样它的简单而有效的所有评论数据

。我不想在页面上加载太多的信息(来自数据库),我不需要它们。

E.g.相同的输入模型是否应该处理多个条目以及单个条目?应该如何加载评论?我只需要在多个条目(列表)页面上的评论数量,但是在单个条目页面上的一些评论数据。你将如何处理?

+1

*(官方)* [创建在20分钟的博客](http://codeigniter.com/tutorials/watch/blog/) – Gordon 2011-01-05 11:21:39

回答

0

是你article_model模型应该处理所有相关的查询和逻辑中的任何条目/条,但对于相关我会做出不同的模型,我们称之为comments_model意见。

然后你看一看数据需要得到显示和构建方法,以检索/处理在你的模型,数据是什么。

例如,对于博客条目页面,您需要在get_entry方法article_model和get_article_comments在评论模型,那么对于博客,你将需要在评论模型get_entryes和get_article_number_of_comments的列表页面....


编辑

对于一个网页,列出20博客entryes你将不得不作出1个查询通过调用article_model-> get_entryes,并displaing 1项只有你可以调用get_single_entry列出所有博客entryes(或您限制结果get_entryes,或get_entry_by_uri或get_entry_by_id ...)。然后,要获得每个条目的评论数量,您可以在评论模型中创建一个get_multiple_nr_comment,并在其中传递条目标识,并且您的查询将会像“where comments.entry_id IN(1,34,55 ...)有多种方法可以在一个查询中统计多个注释编号。

所以你最终每页有2个查询。

+0

对我来说听起来不太高效..如果你建议“..model应该处理所有相关的查询和逻辑。 。“这会开始产生很多数据库调用。例如。列出20个博客条目的页面。我需要进行21次数据库调用。一个用于条目列表,另一个用于每个条目以获得评论数量。对? – ATT 2011-01-05 10:58:56

+0

@ATT:编辑答案,提供更多关于如何让页面只做2个查询的信息。 – 2011-01-05 11:05:04

+0

您可以使用sql连接来获取每个条目的评论数量,而无需使用单独的查询来获取评论数量...... – kevtrout 2011-01-05 12:26:17

0

您可以创建MY_Model,这样的事情:

class MY_Model extends CI_Model { 

    var $table = '';//database table 

    function __construct(){ 
     parent::__construct(); 
    } 

public function get($id = NULL) { 
     $query = $this->db->get_where($this->table, array('id' => (int)$id), 1, 0); 
     if ($query->num_rows() === 1) { 
      return = $query->result(); 
     } 
     return NULL; 
} 

    function get_one($id=NUNLL){} 

    function update($id=NULL, $data=array()){} 

    function delete($id=NULL){} 

    etc... 

} 

然后在每个表您的模型,你可以扩展MY_Model,这样的事情:

class My_Table_model extends MY_Model { 

    function __construct(){ 
     parent::__construct(); 
     $this->table='my_table'; 
    } 
} 

然后可以使用方法来自您的模型中的My_Model。 在你的控制器,你可以有这样的事情:

class Table_Controller extends Front_Controller { 

    function __construct(){ 
     parent::__construct(); 
     $this->load->model('my_table_model'); 
    } 

    function comments(){ 
     $this->my_table_model->get($get_id_somehow); 
    } 

} 

如果你想覆盖的东西,你可以做这样的在你的模型扩展My_Model:

function my_method($id=NULL, $data=array()){ 
    return parent::my_method($id, $data); 
} 
相关问题