3 回答

TA貢獻1869條經驗 獲得超4個贊
您可以使用 laravel 數據庫交易。
如果任何數據庫查詢失敗,它將自動回滾之前的查詢。
DB::transaction(function () { //set of queries //example DB::table('users')->update(['votes' => 1]); DB::table('posts')->delete(); });

TA貢獻1805條經驗 獲得超9個贊
是的,你說得完全正確。您擔心的是數據庫的普遍問題。典型的例子是銀行轉賬,即你向我匯款。需要從您的資金中減去該金額并添加到我的資金中。如果第一次操作就失敗了,那就是運氣不好,但至少沒有人賠錢。如果它在中間某個地方失敗了,在從你那里扣除錢之后,但在將錢添加到我之前,那么你將很難說服我你實際上已經發送了金額,而你已經損失了給定的金額。
您的情況類似,可能風險較小,但仍然重要的是確保在發生故障時恢復操作之前的數據庫狀態。這就是產生這樣一種想法的原因:某些操作應該彼此形成原子綁定,并且它們應該要么一起成功,要么一起失敗。這種將操作綁定在一起的操作稱為事務。
交易是:
阿托米克_
一致_
耐用_
我索然無味
這些共同構成了 ACID 原則,這是你在憂慮中直觀發現的。Laravel 有自己的事務支持,您可以通過以下方式調用:
DB::transaction($somefunction)
你的工作是將你的函數作為參數傳遞給DB::transaction
,不用擔心,因為如果失敗,Laravel 會聲稱會發生回滾。不過,我肯定會進行測試,因為正如溫斯頓·丘吉爾所說:
無論策略多么美好,你都應該偶爾看看結果。

TA貢獻1790條經驗 獲得超9個贊
您可以將 try 和 catch 與 DB:transaction() 一起使用。
try {
//start the transaction
DB::beginTransaction();
//You code
//commit the transaction
DB::commit();
} catch (\Exception $e) {
DB::rollBack();
return response;
}
希望這可以幫助
- 3 回答
- 0 關注
- 208 瀏覽
添加回答
舉報