意見あり: Laravel で複数のレコードを複数のテーブルに安全に挿入する方法

WBOY
リリース: 2024-07-17 19:33:34
オリジナル
536 人が閲覧しました

Opinionated: How to safely insert multiple records to more than one table in Laravel

鳥を殺す方法はたくさんあります。人によって物事を効果的に行う独自の方法があるため、トピックに OPINIONATED を追加しました。これが、複数のレコードを複数のテーブルに挿入し、他のサービスを効果的に実行する私の方法です。

たとえば、以下のリストにあるタスクを登録コントローラーで実行するサービスを実行したいとします。

  • 新しいユーザー/潜在顧客がデータベースに存在するかどうかを確認します。
  • ユーザーを登録します (もちろん、このレコードをテーブルに保存する必要があります)。
  • イベント/アクティビティをテーブルに記録します。
  • アカウント検証のために新しいユーザーのメールアドレス/電話番号を tokens_table に記録します。
  • 10 分で期限切れになるトークンを含むメールを送信します。
  • 有効期限が切れるトークンを含むSMSを送信する 10分以内に

ここでの主な要点は、コントローラーで複数のサービスを実行しており、部分トランザクションの問題が発生しないように、それらがすべて正常に実行される必要があるということです。

部分トランザクションは、トランザクションの一部のみが完了し、データの不整合を引き起こすシナリオとして説明できます。 これを確実に防止するにはどうすればよいですか?

Laravel フレームワークですぐに利用できる

Database Transactions

ファサードを使用します。 データベース トランザクションを実行するには、コード実行プログラムにこれがデータベース トランザクションであることを知らせる必要があります。

リーリー
次に、エラーを簡単にキャッチして必要な処理を実行できるように、

try-catch

ブロックを作成します。 try ブロックはデータベースに挿入され、catch ブロックは発生したエラーをキャッチします。 Try

ブロックの内容については、

ユーザーが存在するかどうかを確認するサービス。

    リーリー
  1. 新しいユーザーを登録し、アクティビティを記録するサービス。
    リーリー
  1. トークンを生成し、
トークンテーブル
    に記録し、2つのリスナー
  1. VerificationEmailListener **と**VerificationSMSListenerによってリッスンされているイベントをディスパッチします。 リーリー 次に、この TRY ブロックの最も重要な部分は、すべてのサービスが正常に実行され、成功の応答が返された場合にこれらの変更をコミットすることです。
リーリー

この try ブロック内のすべてのサービスが成功すると、データベースのコミットによってこれらのトランザクションがデータベースに保存されます。

それでは、

Catch

ブロック部分を見てみましょう。

TRY ブロックでトランザクション/サービスが失敗した場合は、catch ブロックに進みます。そこで、次のように

DB

ファサードを再度呼び出して、データベースに挿入されたすべてのトランザクションをロールバックします。 リーリー DB::rollBack() ファサードは、データベースに挿入されたすべてのトランザクションをミリ秒以内に問題なく保存解除/ロールバックします。 これは、特にLaravelで複数のデータベーストランザクションを実行している場合に、データの不整合を防ぐ方法です。

完全なコードブロック:

リーリー

ご質問がございましたら、お気軽にお問い合わせください。


以上が意見あり: Laravel で複数のレコードを複数のテーブルに安全に挿入する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!