2011-09-20 24 views
0

我對Jamie Rumbelow的MY_Model和模型有一個疑問。 MY_Model提供了一個保存了表格名稱的受保護變量。我想使用它,但我希望我的模型能夠處理3個表格。所以我想我的問題是一個模型可以處理多個表嗎?這樣做的好習慣,還是每個數據庫表有一個模型更好?Codeigniter Model

回答

9

默認情況下,MY_Model不支持多個表格,但是,您可以非常容易地創建方法 - 我喜歡稱它們爲範圍 - 以高效優雅的方式鏈接到其他表格。

比方說,我們有一個post_model.php需要在數據拉從類別表。我假設我們要根據post.category_id引入我們的category.name

class Post_model extends MY_Model 
{ 
    public function with_category() 
    { 
     $this->db->join('categories', 'categories.id = post.category_id', 'left'); 
     $this->db->select('categories.name AS category_name'); 

     return $this; 
    } 
} 

然後,我們可以用我們的with_category()方法(鏈以及所有我們的內置MY_Model方法)來拉我們的分類信息:

$this->post_model->with_category() 
       ->get_all(); 

或者與get_by()

$this->post_model->with_category() 
       ->get_by('status', 'open'); 

範圍界定是將其他表格引入模型的一種很酷的方式,同時仍然可以使用所有的co ol stuff MY_Model規定。

+0

我很高興我使用這種方式作者正在使用它:) – zbrox

+1

這真的需要進入文檔,請! – stef

1

如果您希望不使用Jamie Rumbelow的MY_Model,則必須爲每個模型只使用一個表格,因爲它從模型名稱中獲取表格名稱。正如他介紹的那樣,這是一個基本的CRUD模型,您可以將其擴展以適應您的情況。 我認爲最好的做法是每個模型使用一個表(不包括連接表,如果有的話)。雖然我有時會在CodeIgniter中跳過這個,如果有些東西可以邏輯地添加到同一個模型中,並且不需要太大以至於不需要他們自己的模型。例如有一個評論模型,你只需要評論的投票。我這樣做是因爲懶惰 - 我討厭在CI中手動加載模型。

相關問題