webman 的model->create mysql事务用不起吗
假设下面的sql报错
实际情况是 数据库成功添加,而回滚没有回滚起
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();
贴下代码吧,球球了
贴了 老铁
报错信息?
catch块有没有加回滚?
加了的
贴上去了
catch (Throwable $e) 试试, 报错信息是个嘛?也加一下?
要得
才尝试了,还是回滚不了
catch (Throwable $e)
catch (\PDOException $e)
试试?
要得
才尝试了,还是回滚不了
?,你怎么捕获的,贴全
1.要不你试试 Throwable 2.然后你啥都不干,直接用回滚试试
直接回滚 不让报错,回滚失败,数据库添加成功
我还尝试了 直接关闭try catch 直接执行sql 然后 还是回滚失败
use support\Db; 这个应该是没得错的噻
你在第一个SQL操作直接回滚
我换了个业务简单的test方法
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']);
}
回滚失败
换成这样 CollectionsWarehouse::create ?
https://www.workerman.net/q/9701 看这个和你的是否一样
model里定义了连接 protected $connection = 'mysql';,需要 Db::connection('mysql')->beginTransaction();