webman中使用thinkorm操作数据库,事物不生效,事物报错

fuxu

使用use think\facade\Db,想要操作数据库,但是事物未生效

使用下面代码操作数据库,做新增操作,数据未回滚

程序代码

Db::startTrans();
.
.
Db::rollback();

当使用use support\Db,会报错

截图

577 4 0
4个回答

pengzhen

安装了think orm吗

SillyDog

当使用use support\Db,会报错 这个需要升级 webman/log 到1.1.1 版本以上

  • fuxu 2023-11-17

    这个我也安装了

  • SillyDog 2023-11-17

    安装之后还报错嘛

  • fuxu 2023-11-17

    安装之后试了,也报错

  • SillyDog 2023-11-17

    奇了怪了 可以提供一下复现代码嘛 ?

  • fuxu 2023-11-17

    <?php

    namespace app\model\data;

    use app\model\Base;
    // use think\facade\Db;
    use support\Db;

    class CompanyBase extends Base
    {
    protected $connection = 'data';
    protected $name = 'company_base_info';

    public function add()
    {
    Db::beginTransaction();
    $ScrmDataRecord = new ScrmDataRecord;
    $ScrmDataRecord->addRecord(1);
    Db::rollback();
    }
    }

  • fuxu 2023-11-17

    Error: Class 'Illuminate\Database\Capsule\Manager' not found in D:\app\wamp64\www\scrmSyncData\vendor\workerman\webman-framework\src\support\Db.php:33
    Stack trace:

  • SillyDog 2023-11-17

    php版本也发一下 我尝试复现看看

  • fuxu 2023-11-17

    PHP 7.4.26 (cli)

  • damao 2023-11-17

    tp是用 use think\facade\Db;,你们不要在错误的道路上越走越远

  • damao 2023-11-17

    这个问题一般是ScrmDataRecord; 类里是设置了连接导致Db::beginTransaction();使用的是default连接,连接不是一个就无法使用事务

  • fuxu 2023-11-17

    我开始用的use think\facade\Db;,做新增操作然后回滚,数据还是插入了

  • SillyDog 2023-11-17

    我这边用 think\facade\Db 逻辑是正常的 你这边检查一下开始事务的链接 与 ScrmDataRecord 类里边操作的链接是不是同一个的问题

  • SillyDog 2023-11-17

    看了下源码 think orm 必须使用 think\facade\Db

  • fuxu 2023-11-17

    class ScrmDataRecord extends Base
    {
    protected $connection = 'data';
    protected $name = 'scrm_data_record';

  • fuxu 2023-11-17

    都是同一个数据库

  • fuxu 2023-11-17

    我刚刚又试了一遍,使用use think\facade\Db; Db::startTrans(); Db::rollback(); 数据还是操作成功了,没有回滚

  • damao 2023-11-17

    是同一个数据库,但不是同一个连接,Db::startTrans(); 用的default连接,不是data。
    你default连接去startTrans,然后data连接去insert,然后default连接去rollback,根本不影响data连接。
    类似这样才行 Db::connect('data')->startTrans(); Db::connect('data')->rollback();

  • fuxu 2023-11-20

    明白了,感谢

fuxu

截图

  • 暂无评论
深蓝

你将thinkorm和illuminate/database搞混了。当然报错。

  • 暂无评论
🔝