使用下面代码操作数据库,做新增操作,数据未回滚
Db::startTrans(); . . Db::rollback();
安装了think orm吗
只安装了"webman/think-orm": "^1.1"
https://www.workerman.net/doc/webman/db/thinkorm.html 看清文档 use think\facade\Db;
我描述的问题就是用的use think\facade\Db; 数据插入了,但是想要的是回滚
表引擎是innnodb嘛 ?
是innodb
当使用use support\Db,会报错 这个需要升级 webman/log 到1.1.1 版本以上
这个我也安装了
安装之后还报错嘛
安装之后试了,也报错
奇了怪了 可以提供一下复现代码嘛 ?
<?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(); } }
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:
php版本也发一下 我尝试复现看看
PHP 7.4.26 (cli)
tp是用 use think\facade\Db;,你们不要在错误的道路上越走越远
这个问题一般是ScrmDataRecord; 类里是设置了连接导致Db::beginTransaction();使用的是default连接,连接不是一个就无法使用事务
我开始用的use think\facade\Db;,做新增操作然后回滚,数据还是插入了
我这边用 think\facade\Db 逻辑是正常的 你这边检查一下开始事务的链接 与 ScrmDataRecord 类里边操作的链接是不是同一个的问题
看了下源码 think orm 必须使用 think\facade\Db
class ScrmDataRecord extends Base { protected $connection = 'data'; protected $name = 'scrm_data_record';
都是同一个数据库
我刚刚又试了一遍,使用use think\facade\Db; Db::startTrans(); Db::rollback(); 数据还是操作成功了,没有回滚
是同一个数据库,但不是同一个连接,Db::startTrans(); 用的default连接,不是data。 你default连接去startTrans,然后data连接去insert,然后default连接去rollback,根本不影响data连接。 类似这样才行 Db::connect('data')->startTrans(); Db::connect('data')->rollback();
明白了,感谢
你将thinkorm和illuminate/database搞混了。当然报错。
安装了think orm吗
只安装了"webman/think-orm": "^1.1"
https://www.workerman.net/doc/webman/db/thinkorm.html
看清文档
use think\facade\Db;
我描述的问题就是用的use think\facade\Db; 数据插入了,但是想要的是回滚
表引擎是innnodb嘛 ?
是innodb
当使用use support\Db,会报错 这个需要升级 webman/log 到1.1.1 版本以上
这个我也安装了
安装之后还报错嘛
安装之后试了,也报错
奇了怪了 可以提供一下复现代码嘛 ?
<?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();
}
}
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:
php版本也发一下 我尝试复现看看
PHP 7.4.26 (cli)
tp是用 use think\facade\Db;,你们不要在错误的道路上越走越远
这个问题一般是ScrmDataRecord; 类里是设置了连接导致Db::beginTransaction();使用的是default连接,连接不是一个就无法使用事务
我开始用的use think\facade\Db;,做新增操作然后回滚,数据还是插入了
我这边用 think\facade\Db 逻辑是正常的 你这边检查一下开始事务的链接 与 ScrmDataRecord 类里边操作的链接是不是同一个的问题
看了下源码 think orm 必须使用 think\facade\Db
class ScrmDataRecord extends Base
{
protected $connection = 'data';
protected $name = 'scrm_data_record';
都是同一个数据库
我刚刚又试了一遍,使用use think\facade\Db; Db::startTrans(); Db::rollback(); 数据还是操作成功了,没有回滚
是同一个数据库,但不是同一个连接,Db::startTrans(); 用的default连接,不是data。
你default连接去startTrans,然后data连接去insert,然后default连接去rollback,根本不影响data连接。
类似这样才行 Db::connect('data')->startTrans(); Db::connect('data')->rollback();
明白了,感谢
你将thinkorm和illuminate/database搞混了。当然报错。