2012-07-05 7 views
0

저는 CI와 PHP를 처음 사용했습니다.롤백 PHP - CodeIgniter

나는 파일 업로드를 포함하여 회사와 그 담당자를 서버에 추가하는 양식이 있습니다.

버튼 클릭 한번으로 모든 것이 필요합니다.

그렇게

function create_company() 
{ 

$insert = $this->database->insert(); 

return $insert["insertID"]; //returns the inserted ID 

} 

function file_upload() 
{ 

//upload files if there are some file input selected 

return $array_of_uploaded_files; 
} 

function insert_contacts($company_id,$contacts_array) 
{ 
//return true if everything success 

} 

내 문제가

  1. 먼저 회사 삽입 성공이다, 그러나 그것의 연락처를 추가하는 데 실패, 그럼 내가 현재 삽입 된 항목을 삭제해야
  2. 하는 경우 insert_contact failed 업로드 된 파일을 삭제해야합니다.

하나 이상의 종속성이 실패한 경우 작업을 롤백 할 수있는 방법이 있습니까?

Codeignitor에서 트랜잭션을 알고 있지만 어떻게 [여러 함수 범위로] 사용할 수 있습니까?

파일 업로드는 어떻게됩니까?

내가 php에 익숙하기 때문에 나는이 질문을하고있다. 내가 할 수있는 일은 그렇게 많은 함수를 만들고 적절한 상황에 부르는 것이다.

난 그냥

감사합니다 ... 어떻게 개선하거나 내 코드를 단순화 할 수 있음을 알고 싶어요.

답변

1

왜 거래를 사용하지 않습니까?

http://ellislab.com/codeigniter/user-guide/database/transactions.html

그래서 뭔가 같은 :

$this->db->trans_start(); 
// your database queries 
$this->db->trans_end(); 

확인하여 트랜잭션에 오류가 있다면 :

$this->db->trans_status();  
+0

덕분에 ... 난 트랜잭션이 하나 개의 기능에 일어난에서 확인합니다 다른 기능이 가능한가요? currenty 나는 성공/실패한 작업에 대한 레코드를 가지고 ... 그리고 파일 업로드는 어떨까요? 모든 단서 ... :) – Red

+0

물론, $ this-> db는 단수이며 모든 모델과 컨트롤러에서 사용할 수 있습니다. 따라서 컨트롤러에서 db-> transaction()을 시작하고 모델에서 오류가 발생하면 trans_end()를 호출하지 마십시오. –

+0

죄송합니다 실수로 downvoted, 내가 못하게 해줘! – exussum