CI 묻고 답하기

제목 컨트롤러에서 트랜잭션 처리가 가능할까요?
글쓴이 나이롱 작성시각 2010/12/02 10:45:44
댓글 : 4 추천 : 0 스크랩 : 0 조회수 : 25421   RSS
 안녕하세요

codeigniter 로 프로젝트를 진행 중인 개발자입니다.

쇼핑몰 리뉴얼 작업을 하고 있는데 기존에 만들어진 스파게티 소스를 정리 해 보고자 도입하게 되었어요 (기타 많은 장점을 위해서...)

초기에 스터디를 좀 하고 이제 한참 진행 중인데, 모델 단을 업무의 분류 별로 정리를 하고 있습니다.

memberModel, configModel, couponModel 이런식으로 해서...

컨트롤러에서는 해당 도메인 업무들로 정리된 모델의 function들을 호출해서 사용하게 했습니다.



질문을 올리는 내용은 order와 같은 경우 쿠폰이나 포인트, 회원의 등급 들을 조회하고 변경하기 위해서

각각 다른 모델의 function 들을 호출해서 사용해야 하는데

주문과 같은 업무는 db 의 트랜잭션을 반드시 요하는 업무이기 때문에 트랜잭션 처리를 해야 하는데,

위와 같은 방식일 경우 컨트롤러에서 트랜잭션을 처리를 할 수 있을지가 궁금합니다.


매뉴얼만 봤을때는 모델에서만 처리가 가능한 것 같아서...  만약 다중 상속을 받거나 하는 방법이 있을지... (PHP는 최신 버전을 사용 중입니다.)

자바 개발자 이다 보니 모호한 부분이 많네요...  이런 비슷한 경험이 있으시거나 좋은 아이디어 있으시면 조언 부탁드립니다.

무식한 질문일지 걱정이네요..^^;  정 않되면 orderModel(주문) 내부에서 트랜잭션 처리하게 끔 하는 수밖에 없을 것 같습니다.


감사합니다.

 다음글 [초보]위젯데이터관리 (2)
 이전글 초보 db->get 쿼리 시 배열값 확인하세요!! (2)

댓글

변종원(웅파) / 2010/12/02 17:53:28 / 추천 0
컨트롤러에서 모델을 호출할때 트랜잭션 사용여부 필드를 같이 보내고 그 필드값에 따라
모델에서 트랜잭션을 사용하고 안하고로 프로그램하시는 방법과

db관련된 내용이라도 컨트롤러에서 그냥 쓰실 수 있습니다. codeigniter는 느슨한 mvc 구조이기 때문에
컨트롤러에서 액티브레코드 및 트랜잭션을 그냥 사용하실 수 있습니다. ^^;

질문을 보면서 궁금한 것은 트랜잭션이 필요한 부분은 항상 필요하지 어느 때는 필요없고 어느 때는
필요하고 하지않을 것인데 굳이 컨트롤러에서 트랜잭션을 쓰시려고 하는 이유가 궁금하네요.

주문관련 모델들이 여러 개이더라도 컨트롤러에서 그 여러개를 다 로딩하고 그중
원하는 모델함수만 호출해서 쓰면 될 것 같은데요.. 제가 나이롱님의 정확한 상황을
알 수가 없어서요.. ^^
나이롱 / 2010/12/03 01:19:23 / 추천 0
옹파님 답글 주셔서 감사합니다.

아무래도 제가 제 생각만 하고 이해하기 힘들게 질문을 올린 것 같네요

질문 드리려는 원래 이유는 컨트롤러에서 각기 다른 모델의 function을 호출할 때 트랜잭션을 걸어보고 테스트를 해보니,

트랜잭션 처리가 되지 않는 것 같아 올린 질문이었습니다.

그래서, 컨트롤러에서 여러 각기 다른 function들을 호출하면 트랜잭션 처리가 되지 않는 것이라고 생각되서

방법을 찾고자 올린 내용이었는데요..

웅파님 주신 내용을 보면 컨트롤러에서 각기 다른 모델의 function처리 시 트랜잭션이 문제없다는 말씀이신 것 같습니다.

아마도, 제가 테스트 한 내용에 문제가 있었던 듯 싶네요..

그럼 트랜잭션 처리를 다시 테스트해봐야 할 것 같습니다.


감사합니다. ^^
변종원(웅파) / 2010/12/03 10:19:55 / 추천 0
컨트롤러에서 각기 다른 여러개의 모델의 트랜잭션을 순차적으로 실행하는 부분은 저도 해보지않은 부분이라
되는지 안되는지 정확하게 말씀을 못드리겠네요.

컨트롤러 - 1개의 모델 - function에서 트랜잭션은 작동하지만
컨트롤러 - 여러개의 모델 - 여러개의 트랜잭션은 codeigniter 트랜잭션 소스를 봐야 된다 안된다
말할 수 있을 것 같네요. ^^
MasterH / 2019/09/26 14:57:29 / 추천 0

안녕하세요

transaction 은 db를 불러온 경우 사용될 수 있도록 되어있습니다.

controller 이나 모델에 관계 없이

데이터베이스 호출( $this -> load -> database();)을 하게 되면.

컨트롤러 상에서도

$this -> db -> trans_begin();

model logic 함수들~~ 여러개~

$this -> db -> trans_complete();

를 이용할 수 있습니다.