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. Android 代码自动提示功能

    Eclipse for android 实现代码自动提示智能提示功能,介绍 Eclipse for android 编辑器中实现两种主要文件 java 与 xml 代码自动提示功能,解决 eclips ...

  2. php下webservice使用总结

    基于thinkphp3.2的 1.修改php配置 php.ini extension=php_soap.dll soap.wsdl_cache_enabled=0 2.soap有两种模式 wsdl和 ...

  3. C++输入cin,输出cout,换行endl,getline连续读取字符

    简记:cin=键盘,cout=屏幕. >>和<<指向代表数据流动方向.<<是流插入运算符,右操作数(运算符右边的值)会被插入到输出流中. 首先要包含:#includ ...

  4. Oracle如何实现跨库查询

    实现结果:在一个数据库中某个用户下编写一个存储过程,在存储过程中使用DBLINK连接另一个数据库,从此数据库中的一个用户下取数,然后插入当前的数据库中的一个表中. 二. 实现方法步骤: 1. 创建存储 ...

  5. c# 通过.net自带的chart控件绘制饼图pie chart

    c# 通过.net自带的chart控件绘制饼图pie chart   需要实现的目标是: 1.将数据绑定到pie的后台数据中,自动生成饼图. 2.生成的饼图有详细文字的说明. 具体的实现步骤: > ...

  6. 5 -- Hibernate的基本用法 --3 Hibernate的体系结构

    ⊙ SessionFactory : 这是Hibernate的关键对象,它是单个数据库映射关系经过编译后的内存镜像,也是线程安全的.它是生成Session的工厂,本身需要依赖于ConnectionPr ...

  7. [转]mac osx 下的apt-get,yum的代替工具 ----homebrew

    原文地址:http://blog.csdn.net/tsxw24/article/details/15500517 linux下有很方便的包管理器如:apt-get.yum,mac下也有类似的工具:H ...

  8. springboot学习过程笔记

    1.spring-boot-devtools热部署在IDEA中配置后不起作用(Eclipse设置了自动编译,所以不用额外设置) 1).pom.xml添加spring-boot-devtools依赖后 ...

  9. mysql报错“Starting MySQL...The server quit without updating PID file”处理

    http://blog.csdn.net/lzq123_1/article/details/51354179 注意:要将/usr/bin/mysql_install_db替换成 /usr/bin/my ...

  10. oracle非空不做更新

    update test set B=nvl(p1,B),C=nvl(p2,C),D=nvl(p3,D),E=nvl(p4,E) where A='good'