有人能回答一下在用模型的时候如何使用事务吗? 测试了好多次都不行

MrMarko

PHP版本:8.1.22
反复尝试过无法使用事务
贴出代码:

Db::beginTransaction();
try {
    User::where('id', 14)->update(['integral' => 1]);
    // Db::table('back_user_list')->where('id', 14)->update(['integral' => 1]);
    throw new \Exception('err');
    Db::commit();
} catch (\Exception $e) {
    Db::rollBack();
    return false;
}

当我使用user模型更新时,他无论如何都会更新数据
但是用Db插入的时候却可以拦截,没有更新数据,这就很奇怪了,我在用laravel的时候这样子写是没有问题的,有大神能说一下时啥问题吗?

941 2 2
2个回答

latin

应该模型 User 和 Db用的不是同一个Mysql连接,所以不生效。

Db::connectin('User模型所用的链接')->beginTransaction();
这样指定连接去执行事务,laravel实际上也要注意这个地方,只不过laravel一般配置一个数据库连接,不用指定。

  • MrMarko 2023-09-22

    感谢回答 忘记发出来了,使用connection后 连db的update都可以插入了 所以不是指定的问题

  • MrMarko 2023-09-22

    在我发帖前已经试过的了

  • MrMarko 2023-09-23

    你说的对 我在公用的base写了 // protected $connection = 'plugin.api.mysql'; 这个没有注释掉导致的不生效

gddd


直接上图,测试过没问题,是数据库链接问题,可以为Model创建一个Base类,Base类用$connection指定数据库连接(就是你开启事务的数据库链接)

  • MrMarko 2023-09-23

    你说的对 我在公用的base写了 // protected $connection = 'plugin.api.mysql'; 这个没有注释掉导致的不生效 本来应该操作admin.mysql的 但是base的却是指向了api,虽然是同一个数据库配置,但是就导致了事务失效了,已经注释了,可以直接用,不需要指定配置了

年代过于久远,无法发表回答
×
🔝