国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

在webman-admin中,寫了一個簡單操作,使用到了事務(wù),使用回滾之后,但是不生效

bang

問題描述

在webman-admin中,控制器寫了一個簡單操作,使用到了事務(wù),使用回滾之后,但是不生效。
明明我在try和catch都已經(jīng)回滾了,但是還是不生效。

引用類為 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');

    }
1100 2 2
2個回答

keytehu

事物要使用相同的連接才能生效,Db::beginTransaction(); 默認(rèn)使用的是defualt連接,你需要看下User 模型是用的哪個連接。
然后用類似 Db::connection('具體連接')->beginTransaction();開啟事物,Db::connection('具體連接')->rollBack(); 回滾事物,提交事物也類似

  • bang 2024-02-03

    大哥,你是 正解

bang

事物要使用相同的連接才能生效。以下是個人的解決方法

plugin/admin/app/functions.php 文件中添加以下函數(shù)

/**
 * 返回DB鏈接
 * @param string $connection
 * @return Connection
 */
function M(string $connection = 'plugin.admin.mysql'): Connection
{
    return Db::connection($connection);
}

然后在控制器中使用
M()->beginTransaction();事務(wù)開啟
M()->commit();事務(wù)提交
M()->rollBack();事務(wù)回滾

切記不要用Db,否則回滾會失敗的

  • zhlin163 2024-03-09

    確實,不過可以用帶的Util::db() 獲取 admin的db連接

年代過于久遠,無法發(fā)表回答
??