トランザクション最終更新日: 2021年4月28日

[例] 注文時に商品の在庫を減じる

モデル

2つのモデル「商品」と「注文」を用意します。

商品モデルと注文モデル

商品モデルに「在庫」項目を用意します。

商品モデル

注文モデルに「数量」項目を用意します。

注文モデル

ここで注文データを1件作成したとき、数量に記載した値を商品の在庫から減じるという業務処理を実現します。注文データの新規作成と、商品データの更新をひとまとめとして扱います。Wagbyではこのように、複数のモデル操作をひとまとめに扱うことを「トランザクション」と呼びます。

ワンポイント

トランザクションでは、データベースの更新は「両方とも成功するか」「両方とも失敗して、なかったことにするか」のいずれかになります。「片方だけ成功して、片方は失敗する」ということは生じません。

スクリプト

注文モデルの新規登録というタイミングでスクリプトを設定します。

※ 更新タイミングでも同様に設定する必要がありますが、ここでは説明を割愛します。

最初に、完成イメージを示します。商品在庫が不足していた場合はトランザクションを失敗させています。

注文新規スクリプト(完成)

実行

注文モデル新規登録で、指定した数量が商品在庫を超えた場合、エラーメッセージが表示され、処理が中断されます。なお商品在庫の範囲内であれば注文は成功し、商品の在庫は正しく減じられます。

注文処理の失敗例

ブロックの組み立て方

(準備中)