CI 묻고 답하기

제목 다중 디비 사용 질문드립니다..
카테고리 CI 2, 3
글쓴이 RedoUndo 작성시각 2019/01/31 14:15:02
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 13353   RSS

다중 디비를 사용하면서 쿼리빌더도 같이 사용하고 싶은데 방법이 있나요?

현재는 모델코어도 하나더 확장해서 특정 모델에선 그 확장된 모델코어를 extents 하고 있습니다.

 

컨트롤러에서

 

$this->second_db = $this->load->database('second', true);

 

로 설정해서

 

원하는데로

 

$this->second_db->order_by('desc_key', 'DESC');

$this->Something_model->get_one(); //해당모델는 $this->second_db로 이루어진 확장 모델 코어를 사용하고 있습니다.

echo this->second_db->last_query();
(이 부분은 컨트롤러입니다.)

을 하면 아무런 쿼리도 받아오지 못하네요.

결과 값은 나오거든요...저 order_by가 안된 값으로요...

 

기존에 하나의 디폴트 디비만 사용할때는 이런식으로 해도 값이랑 쿼리 다 왔거든요..

$this->db->order_by('desc_key', 'DESC');

$this->Something_model->get_one(); 

echo this->db->last_query();

 

 

 

생각해봤을땐 더 상위에서 $this->second_db를 넣어줘서 두곳다 한곳을 봐야 할거 같은데,

 

지금은 모델에서 $this->second_db 따로 컨트롤러에서 $this->second_db따로 되어서 그런거 같기도하고... 선배님들의 조언 듣고 싶습니다..

 다음글 주소창이용 curl이용 등등, url직접 접근에 대처방... (4)
 이전글 파일 업로드 할때 권한 질문드립니다. (1)

댓글

kaido / 2019/01/31 14:48:04 / 추천 1

쿼리 실행 하시기 전에 DB 객체를 한번 확인해 보세요

분명 다시 불러오면서 생각지 않은 방식으로 쿼리가 실행되고 있을것 같습니다.

일반적으로 CI는 load class에 의해서 싱글톤 방식으로 객체를 생성관리 합니다만, 다른 DB 연결을 위해 객체를 새로 만들때마다 새로운 객체로 인식 합니다.

 

컨트롤러에서 생성한 거와 모델에서 생성한 DB 객체가 전혀 다른것 같습니다.

더구나 사용법 자체도 컨트롤러에서 선언하고 모델을 따로 호출 하시는데, include 가 아니라서 그런방식으로는 정확히 원하는 작동을 기대하기 어렵습니다.

가급적 쿼리빌더이든 쿼리이든 모델안에 한꺼번에 넣고 컨트롤러는 호출만 하셔야합니다.

 

개인적으로 오라클로 7개 정도 각각 다른 권한으로 DB 설정해서 불러오는 작업을 해본적 있으나, 별 문제 없었습니다.

변종원(웅파) / 2019/01/31 14:49:32 / 추천 1

last_query() 는 최종 result에 대한 처리인데 다중 db의 경우 예외사항이 있는 것 같네요.

원칙적인 사용법은 해당 쿼리 바로 다음에 사용해야 합니다.

get_one() 모델에서 해당 함수를 사용해보세요.

RedoUndo / 2019/01/31 14:51:49 / 추천 0
답변감사합니다. 컨트롤러에서 야매로 order_by 하는 걸 모델 내부로 옮겨보겠습니다..