예 가능합니다. 논리와 코드 네이 터 애플리케이션에 대한 커스텀 코어 클래스를 사용하여 문제를 해결할 수있는 방법을 설명 할 수 있습니다.
응용 프로그램/코어 내부의 파일을 생성/그것을 쓰기 파일 내부에 다음
을 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 개체로 반환해야합니다.
몇 가지 예를 추가 할 수 있습니까? 현재 저조한 구조가 있습니까? ORM 엔티티에서 어떤 변경을하고 싶습니까? – Casey