3

在我的 CMS 中,我想通过在数据库中创建一个表来添加模块。但是带有数据映射器的 Codeigniter 有一个强制性规则:在代码中给出表名。我创建了一个 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”的表时有效。当我将表名更改为“module_news”或其他内容时,它可以工作。但它不会改变我的数据映射器的结构($this->fields)。

我怎样才能做到这一点?有人有这方面的经验吗?

4

3 回答 3

1

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

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

于 2013-01-21T17:43:56.510 回答
0

我有解决办法。我将此添加到我的数据映射器模型中:



    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} = "";
            }

        }

我将它添加到我的构造函数中:

$this->updateTableFields();

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

于 2012-10-29T10:09:42.697 回答
0

因为this->fields数组被填入了parent::__construct();并且此时表名仍然是module_universeel

尝试这个:

if(isset($module_table)) $this->table = $module_table;
parent::__construct();
于 2012-10-29T09:23:20.133 回答