0

发票型号:

attributes: {
  number: {
    type: 'integer'
  }
  lines: {
    collection: 'line',
    via: 'invoice'
  }
}

线型:

attributes: {
  name: {
    type: 'integer'
  }
  invoice: {
    model: 'invoice'
  }
}

如您所见,这些模型具有一对多的关系。一切正常。

但现在我想使用关联的 Blueprint API创建一个新的Invoice和新的Lines 。

该文档说您可以创建一条新记录并将其添加到具有此架构的现有记录中:POST /:model/:id/:association/:fk

但它没有说明是否可以同时创建两条记录并将它们关联起来。

更多细节:我有一张发票,在这张发票中,您可以添加产品、数量和其他内容。现在,当用户单击保存时,我需要创建一个新发票和新行并以某种方式关联它们。

我应该为此创建一个自定义控制器动作,还是我想太多了,我应该完全不同地做这件事?

4

1 回答 1

0

可以在 SailsJS 中使用以下代码创建带有新行的新发票:

Invoice.create({number: 1, lines: [
  {
    name: '1'
  }
]})

这将创建一个编号为 1 的新发票,并创建一个名称为 1 的新行。第 1 行将与发票相关。由于行是一个集合,您可以将它们添加为数组,因此可以将多个行添加到您的发票中。您可以在 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 的 Invoice。如果成功,它将创建一个 Line,并且作为 invoice 的参数,您可以提供之前创建调用的结果。有关 Promises 的信息,请查看http://bluebirdjs.com/docs/getting-started.html

于 2016-07-07T15:14:26.843 回答