CI 묻고 답하기

제목 dbforge 에 대한 질문..
글쓴이 루디아 작성시각 2009/10/06 10:51:33
댓글 : 11 추천 : 0 스크랩 : 0 조회수 : 28500   RSS

관리클래스를 아래와같이 로드합니다:
$this->load->dbforge();

라는 부분이 있는데..
실제 system/database 에는 DB_forge.php 만 존재합니다.

아래 부분이 실행이 되지 않습니다.
$this->dbforge->create_table('table_name');

뭔가 Action 해 주어야 할 것이 있는지요?

참고로 저는 CI는 1.7.1 와  match box 0.9.4를 사용하고 있습니다.
 다음글 체크박스 다중값 어케 넘겨 받나요? (7)
 이전글 css나 javascript들이 자꾸 body 태그 안... (8)

댓글

ci세상 / 2009/10/06 12:09:20 / 추천 0
$this->dbforge->add_field('id INT(9) NOT NULL AUTO_INCREMENT');
$this->dbforge->add_field('id_stem INT(10) NOT NULL');
$this->dbforge->add_key('id',true);
$this->dbforge->create_table('member',true); 
루디아 / 2009/10/06 15:24:34 / 추천 0

네.. 해봤는데..
$this->dbforge->sum_function();

이 동작이 되지 않습니다..!!

 $this->load->dbforge();             // table 생성과 삭제관련
  $table_prefix = "board".$id;  
echo 'table_name='.$table_prefix.'<br>';
  $this->dbforge->add_field('id INT(9) NOT NULL AUTO_INCREMENT');
  
echo 'add_field...';  
  $this->dbforge->add_field('id_stem INT(10) NOT NULL');
  $this->dbforge->add_key('id',true);
  $this->dbforge->create_table($table_prefix, TRUE); 

table_name 까지만 인쇄되고 그 이후 동작이 되지 않습니다..

ci세상 / 2009/10/06 17:44:46 / 추천 0
주신 코드 $id 값만 제대로 받는다면 정상적으로 작동되는것 확인하였습니다.

아마도 db 계정 user 권한이 제한된것 같습니다. 호스팅 계정이라면 권한을 한번 체크해 보시구요

위 부분은 로컬에서 apmsetup 같은것으로 설치하셔서 테스트 해보시면 정상작동되는 것을 확인 가능하실듯 보입니다.
루디아 / 2009/10/06 21:03:43 / 추천 0
감사합니다.

해보니 controllers에 넣어서 하니까 됩니다.
모델로 뺐더니 안되는건 왜그런지 모르겠습니다.
ci세상 / 2009/10/06 22:23:11 / 추천 0
모델도 잘되는데요 안되시는 소스 함 올려줘보세요..  전 다음처름 해보았습니다.

### 컨트롤러 ###
<?php

class Welcome extends Controller {

	function Welcome()
	{
		parent::Controller();	
	}
	
	function index()
	{

		$this->load->view('welcome_message');

		$this->load->model('board_model');
		$this->board_model->table_make(); 
	}
}


### 모델 ####

<?
class Board_model extends Model {

    function Board_model()
    {
        parent::Model();
    
	}

    function table_make()
    {
		$this->load->dbforge();
		$this->dbforge->add_field('id INT(9) NOT NULL AUTO_INCREMENT');
		$this->dbforge->add_field('id_stem INT(10) NOT NULL');
		$this->dbforge->add_key('id',true);
		$this->dbforge->create_table('member',true); 
    }
}
?>
루디아 / 2009/10/07 09:41:51 / 추천 0

function create()
 {
     $id = $this->comm_model->get_uri_value('create');   // id 값을 가져옴
    $page = $this->comm_model->get_uri_value('page');   // page parameter를 가져옴
  
    if ($this->_create_table($id))
    {  
        $data = array('status' => '실행');      // 상태변경 : 대기->실행
     
        $this->db->where('id', $id);
        $this->db->update('bbs_group', $data);     
    }
   else
       $this->session->set_flashdata('error', lang('error_create_table'));  

    redirect('board/bbs_group/lists/page/'.$page);    // 페이지로 돌아가기     
 }
 /**
 * @author   : Lydia 
 * @Update      : 2009. 10. 6.
 * @Description : Table Create ( model에 넣으면 Error 걸림 : 왜 일 까?)
 *
 **/  
 function _create_table($id)
 {         
  $table_name = 'board'.$id;     
  $this->dbforge->add_field('id INT(9) NOT NULL AUTO_INCREMENT');
  $this->dbforge->add_field('bbs_no int(9) NOT NULL');
  $this->dbforge->add_field('hits int(9) NOT NULL');   
  $this->dbforge->add_key('id',true);
  $this->dbforge->create_table($table_name, TRUE);
  
  retrun true;
}

_create_table을 모델에 넣으면 동작이 안되더군요.
다른 function은 잘 동작이 되는데....

변종원(웅파) / 2009/10/07 10:19:52 / 추천 0
_create_table 이 Private 함수라서 그럴지도 모르겠네요.
컨트롤러에서는 함수명앞에 _가 붙으면 Private 함수가 되는데
모델에서도 사용가능한지는 모르겠습니다.

함수명에서 _를 빼고 작업해보세요. ^^
루디아 / 2009/10/07 11:38:04 / 추천 0
네.. 물론 모델에서는 _ 빼고 했습니다.

컨트롤러에 넣느라고 _를 집어 넣었습니다.
일단 Demo 시간을 맞추고 리펙토링을 해야 할듯 합니다.

친절한 답변에 감사합니다!

추가로 질문드리게 있다면, 여기서는 index.php를 Url에 넣지 않았는데,
base_url에 넣은 것 인지요? 아닌 다른 방법이 있는지요?
ci세상 / 2009/10/08 01:05:17 / 추천 0
retrun -> return 오타가 있네요.

전 아래와 같이 테스트 해보니 잘 되었습니다.^^

<?php

class Welcome extends Controller {

	function Welcome()
	{
		parent::Controller();	
		$this->load->dbforge(); 
	}
	
	function index()
	{
		$id = "1";

		if ($this->_create_table($id))
		{  
			echo "실행"; 
		}
	}


	 function _create_table($id)
	 {         
		
		$table_name = 'board'.$id;      
		$this->dbforge->add_field('id INT(9) NOT NULL AUTO_INCREMENT');
		$this->dbforge->add_field('bbs_no int(9) NOT NULL');
		$this->dbforge->add_field('hits int(9) NOT NULL');   
		$this->dbforge->add_key('id',true);
		$this->dbforge->create_table($table_name, TRUE);

		return true;

	}
}
ci세상 / 2009/10/08 09:16:49 / 추천 0
index.php 주소 줄이기 부분은 서버명령어를 이용한 부분인데요 다음 주소를 참조해 주세요.
http://codeigniter-kr.org/tip/view/8/page/4/
http://codeigniter-kr.org/tip/view/2/page/4/
루디아 / 2009/10/16 11:02:29 / 추천 0
감사합니다.