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 关注
- 164 浏览
添加回答
举报