核心:
实例化model
在model层使用事务
- 使用
try...catch
方法
module.exports = class extends think.Model {
async addData() {
// 如果添加成功则 commit,失败则 rollback
try {
await this.startTrans();
const result = await this.add({});
await this.commit();
return result;
} catch(e){
await this.rollback();
}
}
}
- 使用
model.transaction(fn)
方法
module.exports = class extends think.Model {
async updateData(data){
const result = await this.transaction(async () => {
const insertId = await this.add(data);
return insertId;
})
}
}
在controller层使用
- 使用
try...catch
方法
let model = this.model('aaa');
try{
await model.startTrans();
await model.add({name: 'xxx'});
//那如果一个事务中涉及到多个model会怎么处理呢?如下:
let model2 = this.model('bbb').db(model.db());
await model2.add({title: 'yyyy'});
await model.commit();
}catch(e){
await model.rollback();
}
- 使用
model.transaction(fn)
方法
let model = this.model('aaa');
await model.transaction(async () => {
await model.add({name: 'wwww'});
//那如果一个事务中涉及到多个model会怎么处理呢?如下:
let model2 = this.model('bbb').db(model.db());
await model2.add({title: 'yyyy'})
})