질문 Q #24908
CI3 글로벌 트랜잭션 질문입니다.
eogus 2022-11-24 17:47:41

현재 hooks 에다가 

if($CI->input->method() == "post") {
    $CI->db->trans_begin();
}

코드를 넣어서 post요청일 때 자동으로 트랜잭션 시작하게 끔 해놨습니다.

 

$this->db->query($query, $binds);
        if ($this->db->trans_status() === FALSE) {
            return false;
        } else {
            return true;
        }

이 코드가 모델파일에 insert, delete, update 마다 있어서 이걸 전역으로 처리하는 방법을 찾고있습니다.

 

if($CI->input->method() == "post") {
            $CI->db->trans_begin();

            if ($CI->db->trans_status() === FALSE) {
                $CI->db->trans_rollback();
                exit;
            } else {
                $CI->db->trans_commit();
            }
        }

hooks에 이렇게 해봤지만, 

$CI->db->trans_status() === FALSE <<< 이걸 못잡아서 무조건 commit이 되는거같더라구요.

 

스프링에 @transactional 처럼 

메서드 시작하면 트랜잭션시작, 예외가 터지면 롤백, 이상없이 끝나면 커밋 하는걸 만들고있습니다..

 

사용하신분 팁좀 부탁드리겠습니다....

 


 
답변 2
#1 한대승(불의회상) 2022-11-24 17:50:36

스프링과 메커니즘이 달라서 전역적으로 지정할 방법은 없습니다.

#2 eogus 2022-11-24 17:52:44
if($CI->input->method() == "post") {
            $CI->db->trans_begin();
        }

hooks에 이 코드를 사용해야 겠네요.. hooks에 저 코드를 넣어서 문제점이 있을까요?

지금테스트중인데, 문제없이 post일 때 트랜잭션 시작되는거같습니다.