[已解决]webman 的model->create mysql事务用不起吗

Snow

问题描述

webman 的model->create mysql事务用不起吗
截图

假设下面的sql报错
截图
截图

实际情况是 数据库成功添加,而回滚没有回滚起

操作系统及workerman/webman等框架组件具体版本

1.4.3
php 7.4
mysql8.0 表是innodb
ORM 使用的laravel

解决方案 以及原因总结

laravelORM 在webman框架中config->database文件中是
// 默认数据库
'default' => 'mysql',
// 各种数据库配置
'connections' => [
'mysql' => [
'driver' => 'mysql',
'host' => '127.0.0.1',
'port' => 3306,
'database' => 'webman',
'username' => 'webman',
'password' => '',
'unix_socket' => '',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
如果将默认default 修改为 ‘XXX’
connections=>mysql[修改为XXX]
甚至设置第二个库 ,第三个库,这个时候在model里面会产生设置$connection指定库的情况

如果你在使用
Db::beginTransaction();
打开事务的时候,事务是会找不到哪一个库去打开事务,也就会产生事务失效【程序会认为,我找不到库,直接跳过该行代码】

故此需要在开启事务的时候需要改变一下写法
Db::connection('所操作的库(database设置的名称)')->beginTransaction();
Db::connection('xxx')->beginTransaction();

1255 2 2
2个回答

nitron

贴下代码吧,球球了

  • Snow 2022-11-21

    贴了 老铁

  • nitron 2022-11-21

    报错信息?
    catch块有没有加回滚?

  • Snow 2022-11-21

    加了的

  • Snow 2022-11-21

    贴上去了

  • nitron 2022-11-21

    catch (Throwable $e) 试试, 报错信息是个嘛?也加一下?

  • Snow 2022-11-21

    要得

  • Snow 2022-11-21

    才尝试了,还是回滚不了

powerbowen

catch (Throwable $e)

catch (\PDOException $e)

试试?

  • Snow 2022-11-21

    要得

  • Snow 2022-11-21

    才尝试了,还是回滚不了

  • powerbowen 2022-11-21

    ?,你怎么捕获的,贴全

  • powerbowen 2022-11-21

    1.要不你试试 Throwable 2.然后你啥都不干,直接用回滚试试

  • Snow 2022-11-21

    直接回滚 不让报错,回滚失败,数据库添加成功

  • Snow 2022-11-21

    我还尝试了 直接关闭try catch 直接执行sql 然后 还是回滚失败

  • Snow 2022-11-21

    use support\Db; 这个应该是没得错的噻

  • nitron 2022-11-21

    你在第一个SQL操作直接回滚

  • Snow 2022-11-21

    我换了个业务简单的test方法

  • Snow 2022-11-21

    public function index(Request $request): Response
    {
    Db::beginTransaction();
    CollectionsWarehouse::query()->create([
    'user_id'=>'111',
    'serial_number'=>1,
    'collection_id'=>1,
    'gift_number'=>1,
    'term_date'=>time(),
    'update_time'=>time(),
    ]);
    Db::rollBack();
    return json(['11111']);
    }
    回滚失败

  • nitron 2022-11-21

    换成这样 CollectionsWarehouse::create ?

  • powerbowen 2022-11-22

    https://www.workerman.net/q/9701 看这个和你的是否一样

  • sharf 2023-11-08

    model里定义了连接 protected $connection = 'mysql';,需要 Db::connection('mysql')->beginTransaction();

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