📜  laravel db 事务 - PHP (1)

📅  最后修改于: 2023-12-03 15:17:12.416000             🧑  作者: Mango

Laravel DB 事务 - PHP

事务(Transaction)是数据库操作中重要的概念。一组操作要么全部成功要么全部失败,保证数据一致性。在 Laravel 中,我们可以使用 DB facade 提供的方法实现事务操作。

开始事务

我们可以使用 DB::beginTransaction() 方法来开始一个事务,在此之后执行的数据库查询操作都将在一个事务内进行。

DB::beginTransaction();
提交事务

如果事务内所有操作都成功完成,则可以使用 DB::commit() 方法来提交事务,将数据持久化到数据库中。

DB::commit();
回滚事务

如果事务内出现了错误或者其中一个操作失败,则可以使用 DB::rollBack() 方法来回滚事务,撤销所有已执行的操作。

DB::rollBack();
在事务中执行操作

在事务中执行数据库操作的步骤如下:

  1. 开始事务
  2. 执行数据库操作
  3. 判断操作是否成功
  4. 如果操作成功则提交事务,否则回滚事务
DB::beginTransaction();

try {
    // 执行数据库操作
    // ...

    DB::commit();
} catch (\Exception $e) {
    DB::rollBack();
    throw $e;
}
实例
use Illuminate\Support\Facades\DB;

DB::beginTransaction();

try {
    // 减少用户余额
    DB::table('users')->where('id', $userId)->decrement('balance', $amount);

    // 增加商家余额
    DB::table('merchants')->where('id', $merchantId)->increment('balance', $amount);

    DB::commit();
} catch (\Exception $e) {
    DB::rollBack();
    throw $e;
}

以上代码将从用户余额中减去 $amount 的金额,并将这笔金额加到商家的余额中。如果其中一个操作失败,则会回滚整个事务。