2014-10-30 50 views
1

我使用帆水线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

任何消息呢? =) – 2015-04-27 21:13:53

+0

很高兴知道某人也有这个问题哈哈。检查我对自己问题的回答。 – Evilsanta 2015-04-27 21:23:45

回答

0

我没有真正检查事务()的源代码。然后,我最终会做别的事情:

我首先创建一个nativeQuery功能进行查询通话中承诺

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'); 
}); 

没没有真正使用水线交易的东西...