2014-03-06 57 views
0

使用https://github.com/jamierumbelow/codeigniter-base-model,我該如何動態調用模型中使用的表名稱?MY_Model - 動態改變表格?

我有一些機型非常相似,在集團使用的一組用戶和其他用戶B.

爲了節省一些編碼使事情更整潔一組,我想鞏固模型,因此需要傳遞組,並根據傳遞的組更改表。

我知道我可以在模型類的開始下面設置表名,但是我想知道如何在任何時候調用模型方法來動態設置它?

下面是一些測試代碼,我有:

function setGroup($group) 
{ 
    switch($group) { 
     case 'admin': 
     case 'mod': 
      $this->table = 'library_categories'; 
      break; 
     case 'members': 
      $this->table = 'user_categories'; 
      break; 
    } 

    return $this; 
} 

這是行不通的。

如果我在組A的表格後命名模型,例如group_a_model.php,那麼即使設置組B的表($ this-> table ='group_b')也不會實際更改查詢的表。

我試着給模型一個通用名稱(group_model),但後來我必須在模型中設置「public $ table ='group_a')」。同樣,提供的代碼實際上並不會改變使用的表,它總是使用表group_a ...

有沒有辦法使用這個MY_Model幫助器來更改使用的表?

+0

添加viriable被$ this->表例如$表= $這個 - >表=「樣品」 – Denmark

回答

1

該庫中沒有$this->table
有一個$this->_table,它被圖書館用來識別表..但不幸的是,該屬性是受保護的,所以你不能從課外改變它的價值。

添加下面的方法到類:

public function setTable($table) 
{ 
    $this->_table = $table; 
} 

將意味着您現在可以設置使用$this->setTable('a_db_table');

您可以通過直接編輯類文件添加方法的表名。或...繼承該類用自己的類,例如:

class custom_model extends MY_Model{ 
    //put the method I mentioned earlier here 
} 
+0

哈哈,是啊,我想通了不久之後,謝謝你:)標記你作爲答案! –