>PHP 프레임워크 >ThinkPHP >ThinkPHP6의 트랜잭션 작업

ThinkPHP6의 트랜잭션 작업

王雪芹
王雪芹원래의
2020-06-23 09:28:596588검색

트랜잭션 작업은 많은 신규 사용자에게 다소 생소할 수 있습니다. 공식 ThinkPHP6 매뉴얼의 트랜잭션 작업 부분을 읽은 후에도 여전히 이해하지 못합니다. 다음으로 거래업무를 소개하겠습니다.

1. 먼저 사용 시나리오에 대해 이야기해 보겠습니다.

친구에게 1,000위안을 이체해야 한다고 가정해 보겠습니다. 일반적인 비즈니스 논리는 다음과 같습니다.

1. 은행이 내 계좌에서 1,000위안을 공제합니다.

2. 은행이 친구의 계좌에 1,000위안을 추가합니다.

모든 일이 순조롭게 진행되면 전송 성공입니다!

그렇다면 실수로 잘못된 은행계좌를 입력했는데, 은행에서 내가 입력한 은행계좌를 찾을 수 없는데 이때 내 계좌에서 돈이 빠져나간 경우 어떻게 해야 할까요?

우리는 일상생활에서 "돈을 이체할 수 없으면 은행에서 돌려준다"고 흔히 말합니다. 이것이 바로 그 의미입니다.

2. 거래 작업 정의.

위의 예를 통해 우리는 트랜잭션 작업이 무엇인지 이해합니다. 트랜잭션은 작업의 논리적 그룹을 의미하며 모두 성공하거나 모두 실패합니다.

위의 송금 예시처럼 송금이 성공하거나, 실패하면 돈을 돌려줘야 하는데, 이는 초기 상태로 돌아가는 것을 의미하며, 이를 "롤백"이라고도 합니다.

3. ThinkPHP6의 트랜잭션 작업.

트랜잭션 작업의 사용 시나리오를 이해했는데 ThinkPHP6에서 어떻게 사용하나요?

Db::transaction(function () {
    Db::table('think_user')->insert(['name'=>'aaa']);
    Db::table('think_user')->delete(1);
});

위의 예를 살펴보겠습니다. 레코드를 성공적으로 삽입한 경우에만 삭제 작업이 수행됩니다. 삽입에 실패하면 삭제 작업이 수행되지 않습니다.

예를 들어, 의도적으로 잘못된 필드 이름1을 작성하면 필드 이름1이 데이터 테이블에 존재하지 않으며 삽입 프로그램이 성공적으로 실행되지 않습니다. 그러면 다음 삭제 문에는 문제가 없지만 여전히 발생합니다. 처형되지 않습니다.

또한 거래를 수동으로 제어할 수도 있습니다. 아래 코드를 보세요:

// 启动事务
Db::startTrans();
try {
    Db::table('think_user')->find(1);
    Db::table('think_user')->delete(1);
    // 提交事务
    Db::commit();
} catch (\Exception $e) {
    // 回滚事务
    Db::rollback();
}

위는 ThinkPHP6의 트랜잭션 작업 내용입니다. 실제 생활에서의 예를 설명하면 누구나 트랜잭션 작업을 잘 이해할 수 있습니다.

위 내용은 ThinkPHP6의 트랜잭션 작업의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.