TIP게시판

제목 아직은 부족한 테이블 맞추기 함수..
글쓴이 양승현 작성시각 2011/04/01 16:23:40
댓글 : 0 추천 : 0 스크랩 : 0 조회수 : 12888   RSS

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

 다음글 object To Array 함수 입니다. (4)
 이전글 문제가 될수 있는 부분하나 (CI 2.0) (2)

댓글

없음