Laravelで複数のテーブルにinsertやupdateをするときに、整合性が取れるようにDBのトランザクションを使いたいときはよくありますよね
その使い方を教えます
DB::transactionメソッドで複数クエリをコミットする
DBのトランザクションを開いて、全部のクエリが成功したらコミット、もし失敗したらロールバックをするサンプルコードはこれです。
use Illuminate\Support\Facades\DB;
DB::beginTransaction();
try {
Model::save(...);
Model::update(...);
DB::commit();
} catch (\Throwable $e) {
DB::rollback();
}
これだけです。
ポイントは例外でロールバックかなと。
Laravelで稼げる中級エンジニアになるための動画教材
まずDB::beginTransactionでトランザクション開きます。
あとはtry catchで囲んで、saveやupdateメソッドを実行します。
もしそのあたりのメソッドが失敗するとExceptionを投げてきます。
そのときはcatchブロックで受け取って、DB::rollbackでトランザクションをロールバックしてキャンセルします。
全部のクエリが成功するとDB::commitでデータベースにコミットされます。
Laravelの公式はこちら
https://laravel.com/docs/9.x/database#database-transactions