Да, это возможно. Я могу объяснить логику и то, как вы можете решить проблему, используя собственный базовый класс для приложения codeigniter.
Создайте файл внутри приложения / core / и назовите его Mapdm.php
напишите следующее внутри файла.
class Mapdm {
private $map_fields = array();
function __construct($modelClass_name, $map_fields = array()){
$this->_model = new $modelClass_name(); /* instantiate Model */
$this->map_fields = $map_fields;
}
function __get($name){
if(isset($this->map_fields[$name])){
$name = $this->map_fields[$name];
}
return $this->_model->{$name};
}
function __set($name, $value){
if(isset($this->map_fields[$name])){
$name = $this->map_fields[$name];
}
return $this->_model->{$name} = $value;
}
function __call($name, $args){
return call_user_func_array(array($this->_model, $method), $args);
}
}
Чтобы использовать это в вашем контроллере, просто создайте экземпляр этого класса, как показано ниже внутри класса конструктора контроллера. Чтобы упростить данные карты поля таблицы в массиве, вы можете сохранить данные массива в пользовательском файле конфигурации.
пример. map_field_config.php (содержимое файла)
$config['mapfield'][{modelname}] = array ('fieldA'=>'real_fieldname', 'fieldB'=>'real_fieldname2');
настройка файла контроллера
class ControllerName extends CI_Controller{
function __construct(){
parent::__construct();
$mapfields = $this->config->item('mapfield', $mapfields);
$model_fields = $mapfields['mymodel'];
$this->mymodel = new Mapdm('mymodel');
}
function index(){
$records = $this->mymodel->get();
}
}
Я не тестировал этот код, однако я просто написал его, чтобы дать вам представление. Это похоже на создание объекта-оболочки для модели Datamapper и вызов методов и свойств с помощью обертки. Оболочка всегда должна проверять и возвращать правильное имя поля таблицы в объект datamapper.