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();