【Laravel】トランザクションで複数のインサート|try…catchでロールバックまで。

Laravel database sql

Laravelで複数のテーブルにinsertやupdateをするときに、整合性が取れるようにDBのトランザクションを使いたいときはよくありますよね

その使い方を教えます

DB::transactionメソッドで複数クエリをコミットする

DBのトランザクションを開いて、全部のクエリが成功したらコミット、もし失敗したらロールバックをするサンプルコードはこれです。

DB::beginTransaction();

try {
    Model::save(...);
    Model::update(...);

    DB::commit();

} catch (\Exception $e) {
    DB::rollback();
}

これだけです

まずDB::beginTransactionでトランザクション開きます。

あとはtry catchで囲んで、saveやupdateメソッドを実行します。

もしそのあたりのメソッドが失敗するとExceptionを投げてきます。

そのときはcatchブロックで受け取って、DB::rollbackでトランザクションをロールバックしてキャンセルします。

全部のクエリが成功するとDB::commitでデータベースにコミットされます。

Laravelの公式はこちら

https://laravel.com/docs/9.x/database#database-transactions