thinkphp3.2数据库事务异常捕获

ThinkPHP3.* / 470人浏览 / 0人评论

php异常处理和错误处理,在tp3中,默认的数据库驱动位于Think\Db\Driver命名空间下面,驱动类必须继承Think\Db类,每个数据库驱动必须要实现的接口方法包括(具体参数可以参考现有的数据库驱动类库)

thinkphp3.2 数据库

默认的数据库驱动位于ThinkDbDriver命名空间下面,驱动类必须继承ThinkDb类,每个数据库驱动必须要实现的接口方法包括(具体参数可以参考现有的数据库驱动类库)

事务异常处理

开启事务方法 startTrans()
事务提交方法 commit()
事务回滚方法 rollback()
<?php
namespace Home\Controller;

use Think\Controller;
use Home\Model\UserModel;
use Home\Model\UserBalanceDetailModel;

class IndexController extends Controller
{
    public function index()
    {
        $this->show('');
    }

    /**
     * 新增更新数据
     *
     * @Author chambers
     * @email chambers@qq.com
     * @DateTime 2021-12-26 11:52:02
     * @version 1.0.0
     * @return void
     */
    public function change_user_balance() {
        $userModel = new UserModel();
        $userBalanceDetailModel = new UserBalanceDetailModel();
        
        $model = M();
        $model->startTrans();
        $resultUser = $userModel->save();
        $resultUserBalanceDetail = $userBalanceDetailModel->save();

        if($resultUser && $resultUserBalanceDetail){
            var_dump($resultUser);
            //提交处理数据
            $model->commit();
        } else {
            var_dump($resultUser);
            //数据回滚处理
            $model->rollback();
        }
    }

    /**
     * 新增更新数据
     *
     * @Author chambers
     * @email chambers@qq.com
     * @DateTime 2021-12-26 11:52:02
     * @version 1.0.0
     * @return void
     */
    public function change_user_balance_demo_two() {
        $userModel = new UserModel();
        $userBalanceDetailModel = new UserBalanceDetailModel();        
        $model = M();
        try {
            $model->startTrans();
            $resultUser = $userModel->save();
            if(!$resultUser) {
                throw new \Exception('账户更新更新失败, 请重新尝试');
            }
            $resultUserBalanceDetail = $userBalanceDetailModel->save();
            if(!$resultUserBalanceDetail) {
                throw new \Exception('账户明细更新失败, 请重新尝试');
            }            
        } catch (\Exception $e) {
            // rollback
            $model->rollback();
            $this->error($e->getMessage(), '', true);
        }
        if($resultUser && $resultUserBalanceDetail){
            //提交处理数据
            $model->commit();
        }
    }

}

异常信息返回

{
    "info": "账户更新更新失败, 请重新尝试",
    "status": 0,
    "url": ""
}

转载注明:

0 条评论

还没有人发表评论

发表评论 取消回复

记住我的信息,方便下次评论
有人回复时邮件通知我