在webman-admin中,控制器写了一个简单操作,使用到了事务,使用回滚之后,但是不生效。
明明我在try和catch都已经回滚了,但是还是不生效。
引用类为 support\Db;
public function test(Request $request): Response
{
if ($request->method() === 'POST') {
[$id, $data] = $this->updateInput($request, false);
$money = $data['operate_value'] ?? 0;
Db::beginTransaction();
try {
if($data['operate_type'] == 1){
User::money($money, $id, MoneyLog::ADMIN_OPERATE);
}elseif($data['operate_type'] == 0){
User::money(bcmul($money,-1, 2), $id,MoneyLog::ADMIN_OPERATE);
}
Db::rollBack();
}catch (\Exception $e){
Db::rollBack();
return $this->fail(1);
}
return $this->success();
}
return raw_view('user/test');
}
事物要使用相同的连接才能生效,Db::beginTransaction(); 默认使用的是defualt连接,你需要看下User 模型是用的哪个连接。
然后用类似 Db::connection('具体连接')->beginTransaction();开启事物,Db::connection('具体连接')->rollBack(); 回滚事物,提交事物也类似
大哥,你是 正解
事物要使用相同的连接才能生效。以下是个人的解决方法
在
plugin/admin/app/functions.php
文件中添加以下函数然后在控制器中使用
M()->beginTransaction();
事务开启M()->commit();
事务提交M()->rollBack();
事务回滚切记不要用Db,否则回滚会失败的
确实,不过可以用带的Util::db() 获取 admin的db连接