YII使用事物的时候,遇到的一些小问题总结:开始事物,后要进行事物提交,才能操作数据库(折腾了一天)具体使用:

yii事物的定义:是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。

Yii2.0 事物的应用:

$transaction = Yii::$app->db->beginTransaction();
try {
$connection->createCommand($sql1)->execute();
//如果执行失败则抛出错误
if(status == false)
throw new \Exception('这里是错误原因');
$connection->createCommand($sql2)->execute(); $transaction->commit(); //只有执行了commit(),对于上面数据库的操作才会真正执行
}catch (Exception $e) {
$error = $e->getMessage(); //获取抛出的错误
$transaction->rollBack();
}

以上即是数据库事务的简单应用。事务的应用在于多表操作,只有所有数据库操作都成功了,才会执行,其中一个地方失败,就不会执行,以保证数据库动作的完整性。

实例

下面是一个删除的事务实例,我们要达到的目的是删除model时也同时要删除relation,如果其中一步失败则callback

$transaction = Yii::$app->db->beginTransaction();
try{
//删除$model中的数据
$res = $model->deleteAll($cond);
if(!$res)
throw new \Exception('操作失败!'); //删除$model对应的$relation中的数据
$rt = $relation->deleteAll(['polymeric_id'=>$cond['id']]);
if(!$rt)
throw new \Exception('操作失败!'); //以上执行都成功,则对数据库进行实际执行
$transaction->commit();
return Helper::arrayReturn(['status'=>true]);
}catch (\Exception $e){
//如果抛出错误则进入catch,先callback,然后捕获错误,返回错误
$transaction->rollBack();
return Helper::arrayReturn(['status'=>false,'msg'=>$e->getMessage()]);
}

我的示例代码:

$transaction = Yii::$app->db->beginTransaction();
try{
if(!$this->delForumThread($threadId)){
throw new \Exception('操作失败!');
};
// 以上都执行成功 则对数据库进行实际的操作
$transaction->commit();
}catch(\Exception $e){
$error = $e->getMessage(); //获取抛出的错误
$this->error($error);
$transaction->rollBack();
};

Yii---使用事物的更多相关文章

  1. yii 事物

    $transaction = Yii::app()->db->beginTransaction(); //创建事务 $transaction->commit(); //提交事务 $t ...

  2. yii框架

    Yii Framework是一个基于组件.用于开发大型 Web 应用的高性能 PHP 框架.Yii提供了今日Web 2.0应用开发所需要的几乎一切功能.Yii是最有效率的PHP框架之一.Yii是创始人 ...

  3. yii 笔记

    Yii1.1: $_GET 可以表示为 Yii::app()->request->getQuery() $_POST 可以表示为 Yii::app()->request->po ...

  4. Yii 框架不同逻辑处理方法统一事务处理

    1.定义事务处理接口 <?php namespace frontend\business\SaveRecordByransactions; /** * Interface ISaveForTra ...

  5. YII 1.0 常用CURD写法

    <?php //yii1.0 curd简单写法 //查询 Yii::app()->db->createCommand($sql)->queryAll();//查询所有行数据 ​ ...

  6. Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程+事物案例演示

    Dapper的牛逼就不扯蛋了,答应群友做个入门Demo的,现有园友需要,那么公开分享一下: 完整Demo:http://pan.baidu.com/s/1i3TcEzj 注 意 事 项:http:// ...

  7. MyBatis6:MyBatis集成Spring事物管理(下篇)

    前言 前一篇文章<MyBatis5:MyBatis集成Spring事物管理(上篇)>复习了MyBatis的基本使用以及使用Spring管理MyBatis的事物的做法,本文的目的是在这个的基 ...

  8. Yii 2.x Behavior - 类图

    yii\base\Component  继承这个类的类都具备扩展行为的能力

  9. shell 带签名请求,yii 处理带签名的请求

    处理请求 class TestController extends Controller { public function init() { if(!YII_ENV_DEV){ throw new ...

随机推荐

  1. 理解IOC

    理解IOC 1 IoC理论的背景    我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 图1:软件系统中耦合的对象 ...

  2. Linux远程管理之SVN,VNC

    一.远程管理的基本概念 首先我们来初略的讲讲远程管理的一些基本概念.对于我们使用的计算机来说,如果是个人计算机,就没有远程管理这一概念了,想用的时候开机就能使用,而对于我们的服务器来说,就不同了,对于 ...

  3. linux shell搜索某个字符串,然后在后面加上字符串?字符串后面插入字符串?sed字符串后面插入字符串?

    需求描述: 今天在配置nrpe.cfg这个文件,里面有allowed_hosts的IP地址,需要加上监控主机的地址,所以首先要搜索 到这个地址,然后呢,加上监控主机的地址,考虑通过sed命令来实现 操 ...

  4. JavaWeb跨域访问问题

    转载: http://blog.csdn.net/zjq_1314520/article/details/65449279 最后的解决方案如下: 在 tomcat 的 conf目录下找到 web.xm ...

  5. [原]unity3d之http多线程异步资源下载

    郑重声明:转载请注明出处 U_探索 本文诞生于乐元素面试过程,被面试官问到AssetBundle多线程异步下载时,愣了半天,同样也被深深的鄙视一回(做了3年多u3d 这个都没用过),所以发誓要实现出来 ...

  6. Go之继承的实现

    go的继承是使用匿名字段来实现的 package util //----------------Person---------------- type Person struct { Name str ...

  7. 使用 Splash

    Splash 简介与安装 Splash Lua 脚本 Splash 对象属性 Splash 对象方法 Splash API 调用 Splash 负载均衡

  8. Selenium 选项卡管理

    什么是选项卡: from selenium import webdriver browser = webdriver.Chrome() browser.get("http://www.bai ...

  9. osgExp只能将3dmax中的动画导出为路径动画osg::AnimationPath,而不能导出osgAnimation::Animation。osg播放骨骼动画应该使用FBX格式

    通过实际的模型测试,导出为.osg文本格式,搜索animation,只能搜索到AnimationPathCallback,而搜索不到osgAnimation相关类 在OSGExp1.5.0源代码中搜索 ...

  10. 安装RVDS2.2

    本人经过一晚上的折腾,已经将rvds2.2成功部署在为AMD平台的CPU上面,除了些许小BUG外,编译程序无任何错误,可成功将产上的AXF文件通过Jlink烧制到开发板上. 感谢cdly7475为我们 ...