ホームページ  >  記事  >  PHPフレームワーク  >  ThinkPHP6 でのトランザクション操作

ThinkPHP6 でのトランザクション操作

王雪芹
王雪芹オリジナル
2020-06-23 09:28:596450ブラウズ

トランザクション操作は多くの初心者にとって少し馴染みのないもので、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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。