2014-10-30 71 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'); 
}); 

沒沒有真正使用水線交易的東西...