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

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

bang

問(wèn)題描述

在webman-admin中,控制器寫(xiě)了一個(gè)簡(jiǎn)單操作,使用到了事務(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');

    }
1132 2 2
2個(gè)回答

keytehu

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

  • bang 2024-02-03

    大哥,你是 正解

bang

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

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ù)開(kāi)啟
M()->commit();事務(wù)提交
M()->rollBack();事務(wù)回滾

切記不要用Db,否則回滾會(huì)失敗的

  • zhlin163 2024-03-09

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

年代過(guò)于久遠(yuǎn),無(wú)法發(fā)表回答
??