打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
4.事务

事务

模型中提供了对事务操作的支持,但前提需要数据库支持事务。

Mysql 中的 InnoDBBDB 存储引擎支持事务,如果在 Mysql 下使用事务的话,需要将数据库的存储引擎设置为 InnoDB 或 BDB。

SQLite 直接支持事务。

使用事务

模型中提供了 startTranscommitrollback 3 种方法来操作事务。

  • startTrans 开启事务
  • commit 正常操作后,提交事务
  • rollback 操作异常后进行回滚

ES6 方式

export default class extends think.controller.base {  * indexAction(){    let model = this.model("user");    try{      yield model.startTrans();      let userId = yield model.add({name: "xxx"});      let insertId = yield this.model("user_group").add({user_id: userId, group_id: 1000});      yield model.commit();    }catch(e){      yield model.rollback();    }  }}

动态创建类的方式

module.exports = think.controller({  indexAction: function(self){    var model = this.model("user");    return model.startTrans().then(function(){      return model.add({name: "xxx"});    }).then(function(userId){      return self.model("user_group").add({user_id: userId, group_id: 1000})    }).then(function(){      return self.commit();    }).catch(function(err){      return self.rollback();    });  }})

transaction 方法

使用事务时,要一直使用 startTranscommitrollback 这 3 个方法进行操作,使用起来有一些不便。为了简化这一操作,模型中提供了 transaction 方法来更加方便的处理事务。

ES6 方式

export default class extends think.controller.base {  * indexAction(self){    let model = this.model("user");    let insertId = yield model.transaction( function * (){      let userId = yield model.add({name: "xxx"});      return yield self.model("user_group").add({user_id: userId, group_id: 1000});    })  }}

注:Arrow Function 无法和 */yield 一起写,所以上面为 function *。如果想使用 Arrow Function,可以使用 async,如: async () => {}

使用动态创建类的方式

module.exports = think.controller({  indexAction: function(self){    var model = this.model("user");    return model.transaction(function(){      return model.add({name: "xxx"}).then(function(userId){        return self.model("user_group").add({user_id: userId, group_id: 1000});      });    }).then(function(insertId){    }).catch(function(err){    })  }})

transaction 接收一个回调函数,这个回调函数中处理真正的逻辑,并需要返回。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
PHP代码审计基础-高级篇
【PHP】Yii2中事务的使用以及代码实例
PHP实现高并发下的秒杀功能–Laravel
活动页面登录逻辑梳理
wcf系列学习5天速成——第三天 事务的使用
mysql中的set autocommit =0
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服