tp5 中 事务处理 rty {....} catch {....}

一,


		// 开启事务
		Db::startTrans();

		// 删除数据 33

		$a=Db::table("user")->delete(33);
		// 删除数据 34
		$b=Db::table("user")->delete(34);

		// 判断条件

		if ($a && $b) {
			// 提交事务
			Db::commit();
			return true;
		}else{
			// 回滚事务
			Db::rollback();
			return false;
		}

二 。

model 层执行的数据操作 返回 TRUEfalse controller 判断 成功或者失败

// 启动事务 
Db::startTrans();
try{
    // 执行循环插入数据之前先清空 数据表中当前角色的权限;  $info['id'] 角色
    $deleteRes = Db::name('role_node')->where('rid',$info['id'])->delete();
	if(!$deleteRes){
	  	Db::rollback();
	    return false;
	}

    // 循环插入新的 角色权限
    for ($i = 0; $i < count($info['role']); $i++){
        Db::name('role_node')->insert(['rid' => $info['id'], 'nid' => $info['role'][$i]]);
    }

    // 更新成功 提交事务
    Db::commit();
    return true;
} catch (\Exception $e) {
    // 更新失败 回滚事务
    Db::rollback();
    return false;
}


1、事务举例
	
	张三 银行卡 1000, 李四 银行卡 500, 张三给李四转账200

	1) 银行 先扣除 张三的200

	2) 银行 将200 给了李四

mysql事务 要求 数据库的引擎必须 InnoDB

	**使用**
-------------------------------------------------
1、自动控制事务

	Db::transaction(function(){

		// 删除第一条数据
		Db::table("user")->delete(40);

		// 删除第二条数据
		Db::table("user")->delete(41);
	});
-------------------------------------------------
2、手动控制事务 (***)

	// 开启事务
	Db::startTrans();

	// 事务
	try{
		// 删除数据id 31
		$a=Db::table("user")->delete(31);
		// 判断是否删除成功
		if (!$a) {
			Db::rollback();
			throw new \Exception("删除id 31 数据没有成功");
		}
		// 删除不存在的数据 id 32
		$b=Db::table("user")->delete(32);
		// 判断是否删除成功
		if (!$b) {
			Db::rollback();
			throw new \Exception("删除id 32 数据没有成功");
		}
		// 执行提交操作
		Db::commit();
	}catch(\Exception $e){
		// 回滚事务
		Db::rollback();
		// 获取提示信息
		dump($e->getMessage());
	}

------------------------------------------------
3.
	// 开启事务
	Db::startTrans();

	// 删除数据 33
	$a=Db::table("user")->delete(33);
	// 删除数据 34
	$b=Db::table("user")->delete(34);

	// 判断条件
	if ($a && $b) {
		// 提交事务
		Db::commit();
	}else{
		// 回滚事务
		Db::rollback();
	}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值