2011-03-04 5 views
1

Cakephp에서 트랜잭션을 체크 아웃했지만 불행히도 단일 모델에서만 작동하는 것처럼 보입니다. 11 개의 모델에 걸쳐 복잡한 업데이트 세트와 삽입이 있습니다. 모든 정보를 수집하여 업데이트하거나 삽입해야하는 데이터를 나타내는 연관 배열을 만들고 필요한 Model-> save() 호출을 모두 수행합니다.cakephp 롤백 트랜잭션

어떤 이유로 든 실패 할 경우 모든 항목을 롤백하고 싶습니다. CakePHP에서 모든 호출과 이전 호출을 수동으로 "롤백"하고 교체하는 오래된 데이터를 유지하는 것보다 짧습니다. 또는 이것을 달성하는 가장 좋은 방법은 무엇입니까? CakePHP의에서 트랜잭션을 사용

+0

추가 정보는 편집 0을 추가했습니다. – benjamin

답변

3

스티븐,

는 데이터베이스 엔진은 트랜잭션을 지원해야합니다. this이 도움이 될 수 있습니다. 하나의 실행에 여러 개의 연관된 모델을 저장하는 작업이 원자 옵션이 true로 설정된 saveAll으로가는 것은 방법입니다.

편집 0 : 궁금합니다. this은 좋은 점이 있습니까?

+0

이전에 살펴본 설명서에서 begin() 함수를 사용하면 여러 모델을 사용할 때 하나의 모델을 전달해야합니다. 그 트랜잭션을 모든 mnodels에서 처리 할 것인가, 아니면 내가 사용하고있는 모든 모델을 가지고 $ datasource-> begin()을 할 필요가 있으며, 그리고 나서 각각에 대해 commit()과 rollback()을 사용한다. – stephenbayer

+1

모든 모델이 올바르게 연결되어 있으면 saveAll이 작동해야합니다. 그렇지 않다면 트랜잭션의 성격에 따라 수행중인 작업이 시작될 때마다 하나가 시작되고 마지막에는 커밋 또는 롤백이 수행됩니다. cakephp의 경우에는 트랜잭션을 중첩 할 수 없습니다. 모든 모델에 데이터 소스 (예 : 동일한 데이터베이스에 저장된 모델 데이터)를 통해 도달 할 수 있어야합니다. – benjamin

+0

gah, 일일 투표 한도에 도달했습니다. 바쁜 하루였습니다. 몇 시간 후에 투표 할게. 나는 모든 것이 내장 된 기본 모델을 사용했다. 렌탈, 다른 모든 모델은 연관되어 있으며 롤백과 커밋은 훌륭하게 작동했다. – stephenbayer

관련 문제