我們可能因為要操作兩張表以上才算完成這個流程,例如加入會員順便送他優惠券,讓他有VIP的禮遇 XD,為了確保資料的正確,在會員資料表、以及優惠券資料表,加入這兩個紀錄,我們會使用資料庫的Transaction 來完成。
try {
DB::beginTransaction();
// 各種資料庫操作
// 無錯誤提交至資料庫
DB::commit();
} catch (\Exception $exception) {
// 發生例外,復原此次交易
DB::rollback();
// 其他發生錯誤時的商業邏輯。
}
但不管如何都沒有作用,寫入第二張資料表失敗時,第一張資料表還是會寫入資料,並沒有恢復這次資料庫交易的所有動作,可能原因有以下幾項。
症狀:
- 可能原因不同資料庫設定不同連線的DB,假設你的
config/database.php
有設定其他連線方式,必須加上connection
<input name="captcha" type="text" autocomplete="off">
2. 使用MySQL資料庫留意 engine 是不是 InnoDB,MySQL有不同引擎,請確認是不是InnoDB
參考:
https://stackoverflow.com/questions/50720341/laravel-database-transactions-arent-working