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. CStringArray error C2248: 'CObject::CObject' : cannot access private member declared in class

    在开发中将一个字符串分割,并将子字符串保存在CStringArray中,专门写了一个函数,如下: SplitStringToCString(CString str, TCHAR tszSplit, C ...

  2. mysql中查看数据库的版本,什么版本

    需求:查看当前使用的数据库是哪个版本的,什么版本 select version(); 查询结果: 备注:通过version()函数查询出来当前使用的数据库版本是5.5.57-log 文档创建时间:20 ...

  3. 一段代码让DedeCMS完美兼容PHP5.4

    DedeCMS V5.7版本,在本地部署后,正确登录后台的情况下页面没有任何输出和显示(错误登录或密码错误时才有显示),也没有报错.进到脚本调试,发现问题出在userLogin类所在的脚本userlo ...

  4. Extended VM Disk In VirtualBox or VMware (虚拟机磁盘扩容)

    First, Clean VM all snapshot, and poweroff your VM. vmdk: vmware-vdiskmanager -x 16GB myDisk.vmdk vd ...

  5. 【ArcGIS】ArcGIS Enterprise部署

    单机部署 多层部署 高可用性部署

  6. u3d 加密资源并缓存加载

    // C# Example // Builds an asset bundle from the selected objects in the project view. // Once compi ...

  7. MQTT-C-UDP_PUB

    /** ****************************************************************************** * @file    apdu.c ...

  8. 状态保持以及AJAX的初步学习

    嘿嘿,今天学习的有点迷茫哦,主要学习把验证码使用在登录页面时间的一些逻辑,学习这个时间并没有那么的迷惑哦,可是自己写程序时间倒是有点反应迟钝,不过还好总是在最后搞清楚啦,另外就是一步一步的学习是接近项 ...

  9. CoreData 数据库更新,数据迁移

    本文转载至 http://blog.163.com/djx421@126/blog/static/48855136201411381212985/   一般程序app升级时,数据库有可能发生改变,如增 ...

  10. IOS设计模式第九篇之备忘录模式

    版权声明:原创作品,谢绝转载!否则将追究法律责任. 备忘录模式捕获和具体化对象的内部状态.换句话说,它可以节省你的东西后来,这种外部状态可以恢复在不违反封装; 也就是说,私人数据是私有的. 怎么用备忘 ...