제목 | 다중 데이타 베이스 사용법? | ||
---|---|---|---|
글쓴이 | Jeremy | 작성시각 | 2011/10/08 12:58:54 |
|
|||
안녕하세요. 여기저기 외국 사이트 포럼과 여기 문답 포럼 까지 다 뒤져봤는데 제가 초보라서 그런건지 이해가 안되는 것도 있었고, 다 옛날 버젼 인거 같아서 다시 질문합니다. 한 서버 안에 데이타베이스 그룹이 여러개 있습니다. 동시에 이 데이타베이스 그룹들에 접근하려고 하는데요. $this->db_name = $this->load->database('db_name',TRUE);을 이용하면 소스코드 내에서 동시에 그 그룹에 접근할 수 있다는 것을 알게 되었습니다만, $this->db_name->get('table_name');이렇게 말이죠. 그런데 제가 알고 싶은건 매번 컨트롤러나 모델에서 저 명령어를 타이핑하지 않고, 글로벌 하게 자동적으로 저 명령이 수행되게 셋팅하는 법은 없나요? session.php 코드 수정하는 법, 모델이나 라이브러리로 만들어서 부르는 법 다 시도 해봤는데 잘 안되서요. 참고로 전 CI 최신 버젼을 사용중입니다. 자세히 설명해 주실 분 안계신가요? 감사합니다. |
|||
다음글 | 업로드 저장폴더를 각각 지정하는 방법을 알고 싶습니다. (3) | ||
이전글 | CI 2버전에서.... (14) | ||
변종원(웅파)
/
2011/10/08 15:51:56 /
추천
0
|
한대승(불의회상)
/
2011/10/09 23:42:03 /
추천
0
원하시는 답변과 약간 다른 답변이지만, 그냥 나름 이해 한대로 설명해 보죠.
1.7.x로 설명 합니다. 1. config/database.php 에 여러 DB를 설정 합니다. $db['default']['hostname'] = "localhost"; $db['default']['username'] = "user1"; $db['default']['password'] = "userpw1"; $db['default']['database'] = "user1"; $db['default']['dbdriver'] = "mysql"; $db['default']['dbprefix'] = ""; $db['default']['pconnect'] = TRUE; $db['default']['db_debug'] = TRUE; $db['default']['cache_on'] = TRUE; $db['default']['cachedir'] = ""; $db['default']['char_set'] = "euckr"; $db['default']['dbcollat'] = "euckr_korean_ci"; $db['mysql2']['hostname'] = "localhost"; $db['mysql2']['username'] = "user2"; $db['mysql2']['password'] = "userpw1"; $db['mysql2']['database'] = "user2"; $db['mysql2']['dbdriver'] = "mysql"; $db['mysql2']['dbprefix'] = ""; $db['mysql2']['pconnect'] = TRUE; $db['mysql2']['db_debug'] = TRUE; $db['mysql2']['cache_on'] = TRUE; $db['mysql2']['cachedir'] = ""; $db['mysql2']['char_set'] = "euckr"; $db['mysql2']['dbcollat'] = "euckr_korean_ci"; 2. php 파일을 하나 만듭니다. 방법이야 여러가지지만 모델쪽에서 DB를 자주쓰니까 모델 폴더에 common_db.inc.php 파일을 만들도록 하죠. <?php $this->load->database(); $this->db2 = $this->load->database('mysql2', TRUE); ?> 3. 모델을 코딩 할때 include를 시킵니다. <?php class Member_model extends Model { function Member_model() { parent::Model(); include('common_db.inc.php'); } function get_member1() { $rs = $this->db->get('member'); return $rs->result_array(); } function get_member2() { $rs = $this->db2->get('member'); return $rs->result_array(); } } 4. CI 의 autoload 기능을 이용하여 자주쓰는 모델을 등록 합니다. ※ CI는 MVC를 지향하므로 가급적이면 컨트롤러에서 DB에 직접 접근하지 않는것이 좋습니다. |
db 종류에 따라 선언을 하지 않고 알아서 해주길 바라시는거죠?
어떤 테이블이 mysql인지 오라클인지 알수있게 정의를 해 놓고
(또는 선언되어 있는 각 db에서 테이블을 검색하여 가져오거나..)
예) table a -> mysql,
table b -> oracle
ci core에 보면 선언된 각 db에 따라 driver를 로딩하는 부분이 있습니다.
그 앞단에 테이블에 따라 자동으로 드라이버를 로딩하도록 해주면 될 것 같네요.
그런데 코어를 직접 건드려야 하고
저렇게 개발해 놓으면 나중에 수정 못합니다. (아니 못하지는 않지만 수정하려면 어느 테이블이
어디에 있는지 일일이 다 열어봐야 합니다.) 초기 개발자 혼자 계속 유지보수를 한다면 모르겠지만
나중에 소스를 보는 사람은.... ^^;;;;
프레임워크라는 것이 개발속도를 빠르게 해주는 면도 있지만 유지보수에 큰 비중을 두고
적용을 하곤 합니다. 그런 측면에서는 비추입니다.
일단 코어를 건드려야 하는데 DB쪽은 확장이 안되는걸로 알고 있습니다.
나중에 버전업 할때 해당 부분을 다시 수정해줘야하구요.