CI 묻고 답하기

제목 여러 테이블에 영향을 미치는 작업을 할 때
카테고리 CI 2, 3
글쓴이 마카바 작성시각 2017/01/20 21:53:44
댓글 : 2 추천 : 0 스크랩 : 0 조회수 : 15083   RSS
안녕하세요 매번 감사드립니다. 

새로고침으로 날려먹어서 두번째 쓰네요 ㅠㅠ

 

하나의 작업에 여러가지 테이블에 영향을 미칠 때

어떤 식으로 코딩하는것이 best practice인지 궁금증이 없어지질 않아 질문 남깁니다. 

 

가령, 등록 버튼을 눌렀을 때 

(1) A테이블에서 기존에 등록된 데이터가 있는지 조회를 한다 

(2) 없다면 A테이블과 B테이블에 insert를 하고 

(3) C테이블을 update 시킨다

이런 작업에서 

A에서 중복되는 데이터가 있어도 안되고, A와 B에 insert하는 과정에서도 실제 삽입이 된 row가 있어야 하고 

update까지 모두 마쳐야 success를 응답으로 주고 싶다면 

...
$query = $this->db->get();
$resultA = $this->db->get();

if($query->num_rows() > 0){
   $resultB = $this->db->insert(~~);
   if($resultB){
      $this->db->update()
   }
}

이런 식으로 if, else를 남발하지 않고선 방법이 없는걸까요? ㅠ 

각각의 에러 상황에서 response를 다르게 주고 싶다고 하면 

코드가 더 지저분해집니다. 

고수님들의 의견이 궁금해요.

transaction?을 쓰면 실제로 affected된 row가 없어도 그대로 진행이 되고 롤백이 되지 않기 때문에 

제가 원하는 방향이 아닌 것 같다는 생각이 들구요..

 다음글 db 쿼리 결과값 받아올때 에러가 발생합니다. (11)
 이전글 codeigniter3 버전에서 서브도메인 라우팅 관련... (9)

댓글

한대승(불의회상) / 2017/01/20 22:26:33 / 추천 0

지저분해 보여도 그렇게 하는게 좋습니다.

transaction은 필수구요.

transaction을 쓰지 않으면 insert는 됐는데 update 에러가 났을때 대책이 없습니다.

마카바 / 2017/01/22 17:29:03 / 추천 0
그렇군요 감사합니다 ^^