发票 - 型号:
attributes: {
number: {
type: 'integer'
}
lines: {
collection: 'line',
via: 'invoice'
}
}
订单 - 型号:
attributes: {
name: {
type: 'integer'
}
invoice: {
model: 'invoice'
}
}
正如您所看到的,这些模型具有一对多的关系。一切都很好。
但现在我想使用与之关联的Blueprint API创建新的发票和新的行。
文档说您可以使用此架构创建新记录并将其添加到现有记录中:POST /:model/:id/:association/:fk
但它没有说明是否可以同时创建两个记录并将它们关联起来。
更多详细信息:我已收到发票,您可以在此发票中添加包含产品,数量和其他内容的行。现在,当用户点击“保存”时,我需要创建一个新发票和新行并以某种方式关联它们。
我应该为此创建一个自定义控制器动作,还是我过度思考这个并且我应该完全不同的做这件事?
答案 0 :(得分:0)
使用以下代码可以在SailsJS中创建带有新行的新发票:
Invoice.create({number: 1, lines: [
{
name: '1'
}
]})
这将创建一个编号为1的新发票,并创建一个名称为1的新行。第1行将与发票相关联。 由于lines是一个集合,您可以将它们添加为数组,因此可以在Invoice中添加多个Line。 您可以在InvoiceController中覆盖您的create函数并添加此代码。
另一种解决方案是使用Promises。确保使用以下命令安装bluebird:
npm install bluebird
将以下代码放在控制器的顶部
var Promise = require('bluebird');
您可以使用以下代码:
createWithPromises: function(req, res){
var lineName = 1;
var invoiceNumber = 2;
Invoice.create({number: invoiceNumber})
.then(function(result){
Line.create({name: lineName, invoice: result})
})
.then(function(result){
sails.log(result);
})
}
首先,它会创建一个编号为2的发票。如果成功,它将创建一个Line,并且作为发票的参数,您可以提供先前创建调用的结果。 有关Promises的信息,请检查http://bluebirdjs.com/docs/getting-started.html