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