2011-01-05 24 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); 
} 
相關問題