Codeigniter Datamapper - Добавить имя таблицы с помощью __construct

В моей CMS я хочу добавить модули, создав таблицу в базе данных. Но Codeigniter с datamappers имеет одно обязательное правило: укажите имя таблицы в вашем коде. Я создал модель 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) моего datamapper.

Как я могу это сделать? У кого-нибудь есть опыт с этим?

3 ответа

Datamapper кэширует определения таблиц, управляемые свойством конфигурации "production_cache".

Если кеш включен, таблица не будет запрашиваться при каждой загрузке страницы, но используется кэшированная информация.

У меня есть решение. Я добавляю это к моей модели 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} = "";
            }

        }

И я добавил это к моему конструктору:

$ This->updateTableFields();

И теперь я успешно изменил структуру. Спасибо за помощь!

Поскольку this->fields массив заполняется в parent::__construct(); И в этот момент имя таблицы все равно будет module_universeel

Попробуй это:

if(isset($module_table)) $this->table = $module_table;
parent::__construct();
Другие вопросы по тегам