📜  Db 事务 laravel (1)

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

Laravel中的数据库事务

在程序开发中,数据库事务通常用于确保所有的数据库操作都成功执行或者都不执行。如果中间某一步出现了错误,所有的操作都将会被回滚,保证了数据的一致性。Laravel提供了数据库事务的支持,使得开发者能够轻松地实现数据库操作的事务控制。

开始一个事务

我们可以使用DB门面的beginTransaction方法来开始一个事务:

DB::beginTransaction();
提交事务

当所有的操作都执行成功后,我们可以调用commit方法提交事务:

DB::commit();
回滚事务

如果中间的某个操作出现了问题,我们可以使用rollback方法回滚事务:

DB::rollback();
事务嵌套

在Laravel中,我们可以嵌套多个事务。当最里层的事务发生异常时,事务会向外层逐级回滚。

DB::beginTransaction();

try {
    // SQL操作
    DB::beginTransaction();

    try {
        // SQL操作
        DB::commit();
    } catch (\Exception $e) {
        DB::rollback();
        throw $e;
    }

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

DB::commit();
事务中使用模型

在事务中使用模型需要注意以下几点:

  • 在事务结束前,不要尝试保存数据,否则会抛出异常。
  • 在事务中查询的数据会被锁住,直到事务结束。
DB::beginTransaction();

try {
    // 操作一个模型
    $user = new User();
    $user->name = 'John Doe';
    $user->email = 'john@example.com';
    $user->save();

    // 操作另一个模型
    $post = new Post();
    $post->title = 'Hello World';
    $post->body = 'This is my first post';
    $post->user_id = $user->id;
    $post->save();

    DB::commit();
} catch (\Exception $e) {
    DB::rollback();
    throw $e;
}
参考链接