thinkjs / thinkjs

Use full ES2015+ features to develop Node.js applications, Support TypeScript.
https://thinkjs.org/
MIT License
5.31k stars 617 forks source link

关于事务的问题 #1478

Closed lantongxue closed 4 years ago

lantongxue commented 4 years ago

DESC

有两个model,用其中一个的model的事务,会出现后面事务无法提交的问题。

ENV

OS Platform: win10 x64 & macOS 10.14.5

Node.js Version:v13.11.0

ThinkJS Version:3.2.11

code

let model = think.model('order') as OrderModel;
let u = think.model('user') as UserModel;
try{
       await model.startTrans();
       await model.add({x:x});
       await u.where({id: 1}).update({x: x});
       await model.commit();
}catch(e){
       await model.rollback();
       throw e;
}

more description

经过测试,注释掉 await u.where({id: 1}).update({x: x}); 可以走通,但这不符合需求。 请问这是什么原因导致的?为什么有两个模型就不能提交事务?

或者针对这种情况有什么好的解决方案?

lizheming commented 4 years ago

https://thinkjs.org/doc/3.0/relation_model.html#toc-e30 事务中的模型需要复用连接,使用 db() 可以解决问题。

let model = think.model('order') as OrderModel;
let u = think.model('user') as UserModel;
u.db(model.db());