2012-10-29 35 views
3

在我的CMS中,我想通過在數據庫中創建一個表來添加模塊。但Codeigniter with datamappers有一個強制性規則:在你的代碼中給出表名。我有創造的DataMapper模型如下:「module_universeel」:Codeigniter Datamapper - 通過__construct添加表名稱

class Module_universeel extends DataMapper { 

    public $table = 'module_universeel'; 
    public $has_one = array('page'); 

    public function __construct($module_table=null) { 

     parent::__construct(); 
     if(isset($module_table)) $this->table = $module_table; 

    } 
} 

,當我創建一個名爲表這工作。當我將表格名稱改爲'module_news'或其他東西時,它可以工作。但它不會改變我的數據映射器的結構($ this-> fields)。

我該怎麼做?有沒有人有這方面的經驗?

回答

0

因爲this->fields陣列獲取的parent::__construct();而在這一點上填寫表格名稱仍然是module_universeel

試試這個:

if(isset($module_table)) $this->table = $module_table; 
parent::__construct(); 
+0

這也行不通。它不會更改我的表的名稱(當我打印它時)。 – DutchDeveloper

+0

你如何稱呼你的模特? – Geert

0

我有解決方案。我想補充這我DataMapper的模式:



    public function updateTableFields(){ 
      $this->fields = array(); 
      $data_fields = $this->db->field_data($this->table); 
      foreach ($data_fields as $data_field){ 
       $this->fields[] = $data_field->name; 
       $this->stored->{$data_field->name} = ""; 
      } 

     } 

而且我將此添加到我的構造函數:

$這個 - > updateTableFields();

現在我改變了結構成功。謝謝你幫助我!

1

Datamapper高速緩存表定義,由配置屬性「production_cache」控制。

如果啓用了緩存,將不會在每個頁面加載中查詢該表,但會使用緩存的信息。

相關問題