自以為是:如何在 Laravel 中安全地將多筆記錄插入多個表中

WBOY
發布: 2024-07-17 19:33:34
原創
607 人瀏覽過

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

殺死鳥的方法有很多種。不同的人有自己獨特的有效做事方式,這就是為什麼我在主題中添加了 OPINIONATED,這是我將多條記錄插入多個表並有效運行其他服務的方式。

例如,假設您想要執行一個服務來在註冊控制器中執行這些未列出的任務:

  • 檢查資料庫中是否有新使用者/潛在客戶。
  • 註冊一個使用者(當然我們必須將這條記錄保存在一個表格中)。
  • 將事件/活動記錄在表中。
  • 將新使用者的電子郵件/電話號碼記錄在 tokens_table 中以進行帳戶驗證。
  • 發送包含令牌的電子郵件,該令牌將在 10 分鐘後過期。
  • 發送包含將過期的令牌的短信 10 分鐘後。

這裡的主要要點是,我們在控制器中運行多個服務,並且它們必須全部成功運行,這樣我們就不會出現部分事務問題。

部分交易可以描述為只完成部分交易的場景,導致資料不一致.

我們如何確保我們能夠避免這種情況?

我們使用 Laravel 框架中隨時可用的資料庫事務外觀。

要運行資料庫事務,我們需要讓程式碼執行器知道這是一個資料庫事務。

雷雷

然後我們建立一個try-catch區塊,這樣我們就可以輕鬆捕獲錯誤並執行所需的操作。 try 區塊將插入資料庫,而 catch 區塊將捕獲遇到的任何錯誤。

對於Try區塊裡的內容,我們會有

  1. 檢查使用者是否存在的服務。
雷雷
  1. 註冊新用戶並記錄活動的服務。
雷雷
  1. 產生一個令牌,將其記錄在令牌表中,並調度一個由兩個偵聽器VerificationEmailListener **和**VerificationSMSListener正在偵聽的事件。
雷雷

然後,這個 TRY 區塊中最重要的部分是在所有服務成功運行並返回成功回應的情況下提交這些變更。

雷雷

如果這個try區塊中的所有服務都成功,資料庫提交會將這些交易保存到資料庫中。

現在讓我們來看看Catch塊部分。

如果事務/服務在TRY區塊中失敗,它將到達 catch 區塊。因此,我們將再次呼叫DB外觀來回滾已插入資料庫的每個事務,如下所示:

雷雷

DB::rollBack() 外觀將在幾毫秒內取消儲存/回滾已插入資料庫的每個事務,不會出現任何問題。

這是我如何避免資料不一致的方法,尤其是當我在 Laravel 中執行多個資料庫事務時。

完整程式碼區塊:

雷雷

如果您有任何疑問,請不要猶豫,留下它。

以上是自以為是:如何在 Laravel 中安全地將多筆記錄插入多個表中的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!