2026-01-28 16:55:23
Laravel提供了多种方式处理数据库事务,确保一组操作要么全部成功,要么全部回滚,保障数据一致性。以下是具体方法及示例:
1. 使用 DB::transaction 自动提交/回滚Laravel的DB门面提供了transaction方法,通过闭包自动管理事务。闭包内代码执行时开启事务,成功则自动提交,抛出异常则自动回滚。
若闭包内代码执行成功,事务自动提交。
若抛出异常(如数据库错误),事务自动回滚。
在复杂逻辑中(如条件判断后决定是否提交),可手动管理事务流程:
调用DB::beginTransaction()开启事务。
执行数据库操作。
成功时调用DB::commit()提交,失败时调用DB::rollback()回滚。
当使用Eloquent模型操作多表时,结合事务可保证数据一致性(如创建用户及其关联资料):
若profile创建失败,user的创建也会被回滚。
在已开启的事务中再次调用DB::transaction,不会创建新事务,而是增加层级计数。
只有最外层事务提交后,数据才会真正写入。
任何层级抛出异常都会导致整个事务回滚。
避免在多个服务或方法间随意嵌套transaction,可能导致逻辑混乱。
复杂场景建议拆分事务或使用状态模式管理。
合理运用Laravel事务机制,可显著提升数据完整性,同时使代码更清晰可靠。