CI 묻고 답하기

제목 트렌젝션 trans_start(), trans_complete() 질문입니다.
글쓴이 sam 작성시각 2013/08/21 14:00:51
댓글 : 5 추천 : 0 스크랩 : 0 조회수 : 15329   RSS

메뉴얼을 보니 트렌젝션 사용 하는 방법중 아래

$this->Test_model->db->trans_start();

이런식으로 시작해서

$this->Test_model->db->trans_complete();

이렇게만 하면 되는걸로 알고있습니다.

그런데 2개이상의 model class를 사용할 경우엔 어떻게 처리해야 하는지 알고싶습니다.

$this->Test_model->db->trans_start();
$this->Test2_model->db->trans_start();

$this->Test_model->db->trans_complete();
$this->Test2_model->db->trans_complete();

이런식으로 가능 한가요 ?

한가지 더 궁금한점은  trans_start 와 trans_complete 의 중간에 어떠한 경우에 rollback을 하는지 명확하지 않네요.
start 이후에 die() 함수의 호출이라던지, 모든 실행이 중지되는 런타임에러나 파탈에러 등 관계 없이 무조건 성공적으로 rollback이 되는지 궁금합니다.

질문 요악합니다.

질문1.  2가지 이상의 model class사용 시 trans_start(), trans_complete()  로 트렌젝션 제어하는 방법

질문2.  trans_start(), trans_complete()   도중에 die() 함수가 호출되거나 , 모든 실행이 중지되는 런타임 에러 발생 시에도 
            제대로 rollback을 수행하는지 여부


감사합니다.



 

 다음글 [초보질문] 간단url 만들기 고수님들 좀 봐주세요 ㅠ... (7)
 이전글 js, css 경로 설정 질문 (8)

댓글

한대승(불의회상) / 2013/08/21 15:07:04 / 추천 0
$this->db->trans_start();
$this->test_model->a();
$this->test2_model->b();
$this->db->trans_complete();

sam / 2013/08/21 15:31:19 / 추천 0
한대승 //
$this->db 가 안됩니다..  트렌젝션을 시작하는 class 가 CI_Controller 를 상속 받은 컨트롤러의 위치입니다..
컨트롤러에서
$this->load->model('Test_model');
$this->load->model('Test2_model');

이러한 형태로 되어있구요.
model class의 함수를
$this->Test_model->a( );
$this->Test2_model->a( );

이런식으로 호출했는데...

어떻게 해야할까요
변종원(웅파) / 2013/08/21 15:57:16 / 추천 0
매뉴얼을 다시 보시기 바랍니다.

모델의 함수를 가지고 트랜잭션하는게 아니라 쿼리 단위입니다.

$this->db->trans_start();
$this->db->query('AN SQL QUERY...');
$this->db->query('ANOTHER QUERY...');
$this->db->query('AND YET ANOTHER QUERY...');
$this->db->trans_complete();
들국화 / 2013/08/21 16:06:30 / 추천 0
좀 특이한 방법으로 하시네요. 저게 되나요?

어쨌든 1번 안될듯 하네요. 같은 세션이니까요. 연결을 하나더 만들면  되나 따로 동작하겠죠.. 즉 같은 트랜젝션이 아니란 뜻이죠..

2. 에러가 있는지 마지막에 체크 하거나 중간에 원하는 값이 아닐때 로직상으로 롤백. 나머지 정상이면 커밋 이겠죠...
sam / 2013/08/22 09:38:19 / 추천 0

안된다는 걸 이해는 했습니다... 실제로 안되기도 하고요.

어떻게 처리해야 될 지 어렵네요...

다들 트렌젝션 관리 어떤식으로 하시나요 ?