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的时候这样子写是没有问题的,有大神能说一下时啥问题吗?
应该模型 User 和 Db用的不是同一个Mysql连接,所以不生效。
Db::connectin('User模型所用的链接')->beginTransaction();
这样指定连接去执行事务,laravel实际上也要注意这个地方,只不过laravel一般配置一个数据库连接,不用指定。
感谢回答 忘记发出来了,使用connection后 连db的update都可以插入了 所以不是指定的问题
在我发帖前已经试过的了
你说的对 我在公用的base写了 // protected $connection = 'plugin.api.mysql'; 这个没有注释掉导致的不生效
直接上图,测试过没问题,是数据库链接问题,可以为Model创建一个Base类,Base类用$connection指定数据库连接(就是你开启事务的数据库链接)
你说的对 我在公用的base写了 // protected $connection = 'plugin.api.mysql'; 这个没有注释掉导致的不生效 本来应该操作admin.mysql的 但是base的却是指向了api,虽然是同一个数据库配置,但是就导致了事务失效了,已经注释了,可以直接用,不需要指定配置了