cms툴을 쪼물딱 하다보니 필요한 부분이라 만들어 본거랍니다.
초기버전이라 생각하시고 살좀 붙여 주시면 감사하겠습니다. ^^;
/**
* 테이블을 맞춘다.
*
* @param String $tableName : 테이블명
* @param Array $fields : 필드 배열
* @param Array $keys : 키 배열
* @return Boolean : 생성결과
*/
function tableAdjust($tableName, $fields, $keys){
$this->CI = get_instance();
//dbforge 초기화
$this->CI->load->dbforge();
if($this->CI->db->table_exists($tableName) == FALSE){
// 필드 추가
$this->CI->dbforge->add_field($fields);
if(isset($keys)){
//키 추가
foreach($keys as $key => $boolean){
$this->CI->dbforge->add_key($key, $boolean);
}
}
// 테이블 생성
$this->CI->dbforge->create_table($tableName, TRUE);
}else{
// 테이블이 존재할경우 필드와 키 비교
// 해당테이블의 필드정보를 읽어온다.
$existFields = $this->CI->db->field_data($tableName);
// 필드가 설정되어있다면 필드를 비교
foreach($fields as $fieldName => $fieldInfo){
//필드가 존재하지 않는다면
if($this->CI->db->field_exists($fieldName, $tableName) == FALSE){
$field = array($fieldName => $fieldInfo);
$this->CI->dbforge->add_column($tableName, $field);
}else{
//필드가 존재할경우 필드 타입을 비교한다.
foreach($existFields as $existField){
// 존재하는 테이블의 필드 정보가 text일경우 blob로 들어온다.
if($existField->type == 'blob') $existField->type ='text';
// 존재하는 테이블의 필드 정보가 varchar일경우 string으로 들어온다.
if($existField->type == 'string') $existField->type ='varchar';
// 정의한 신규 필드정보가 text일경우 constraint값이 없다.
if(@$fieldInfo['type'] == 'text') $fieldInfo['constraint'] = 0;
if($existField->name == $fieldName){
if(($existField->type != strtolower(@$fieldInfo['type']))){
$fieldInfo['name'] = $fieldName;
$field = array($fieldName => $fieldInfo);
$this->CI->dbforge->modify_column($tableName, $field);
}
}
}
}
}
}
}
|