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'] 角色
    Db::name('role_node')->where('rid',$info['id'])->delete();

    // 循环插入新的 角色权限
    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) {
			throw new \Exception("删除id 31 数据没有成功");
		}
		// 删除不存在的数据 id 32
		$b=Db::table("user")->delete(32);
		// 判断是否删除成功
		if (!$b) {
			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();
	}



你可能感兴趣的:(tp5)