我正在使用Sails waterline mysql适配器来管理数据库,
假设我有两个模型,即客户和合同,当我创建合同时,我还需要找到或创建此客户。但我有可能创建了这个客户,然后合同未能创建。所以我试图获得交易方式。
从https://github.com/balderdashy/waterline/issues/62我发现一个模型上的交易。比如查找和创建
Customer.transaction().findOne({name:"aaa"}).done(function(err,data){
if(err) data.rollback(callback);
if(!data)//does not exist
Customer.create({name:"aaa"}).done(function(err,data2){
data.save().commit()
});
});
但是,如果我需要创建两个模型,则应创建或不创建两个模型。就像合同失败一样,也不应该创建客户端。我该怎么做?
Customer.transaction().create({name:"aaa"}).done(function(err,client){
if(err) return client.rollback(callback);
Contract.create({contractname:"bbb"}).done(function(err,contract){
if(err) return client.rollback(callback);
client.save().commit()
});
});
这个client.save()还会控制契约模型吗?
由于
答案 0 :(得分:0)
我没有真正检查transaction()上的源代码。然后我最终做了别的事情:
我首先创建一个nativeQuery函数,以便在promise
中进行查询调用nativeQuery=function(query){
var promise=Promise.defer();
[AnyModel].query(query,function(err,data){
if(err) promise.reject(err);
promise.resolve(data);
});
return promise.promise;
}
然后我使用旧时尚启动事务语法
nativeQuery('START TRANSACTION').then(function(){
do stuff
}).then(function(data){
return nativeQuery('COMMIT');
}).fail(function(err){
return nativeQuery('ROLLBACK');
});
没有真正使用水线交易的东西......