Codeigniter Datamapper - 按__construct添加tablename

时间:2012-10-29 09:14:06

标签: codeigniter codeigniter-datamapper

在我的CMS中,我想通过在数据库中创建表来添加模块。但是带有datamappers的Codeigniter有一个强制性规则:在代码中给出tablename。我创建了一个Datamapper模型如下:

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_universeel'的表时,这是有效的。当我将tablename更改为'module_news'或其他东西时,它可以工作。但它不会改变我的datamapper的结构($ this->字段)。

我该怎么做?有人有这方面的经验吗?

3 个答案:

答案 0 :(得分:1)

Datamapper缓存由配置属性“production_cache”控制的表定义。

如果启用了缓存,则不会在每个页面加载上查询该表,但会使用缓存的信息。

答案 1 :(得分:0)

因为this->fields数组已填入parent::__construct();,此时表名仍为module_universeel

试试这个:

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

答案 2 :(得分: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();

现在我成功地改变了结构。谢谢你的帮助!