【问题标题】:sailsjs - one POST multiple records and associations createdSailsjs - 创建一个 POST 多个记录和关联
【发布时间】:2016-07-07 09:07:36
【问题描述】:

发票型号:

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

线型:

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

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

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

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

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

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

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

【问题讨论】:

    标签: node.js sails.js associations waterline sails-postgresql


    【解决方案1】:

    可以在 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

    【讨论】:

    • 很遗憾这不起作用。这是 SailsJS 处理所有 create 请求的默认方式。此外,我在自定义操作中使用确切的代码进行了尝试,但它不起作用。你有没有机会知道是否有其他方法?发票已创建,但其中没有任何行。
    • 这很奇怪,你确定你覆盖了 InvoiceController 中的 create 函数吗?我用承诺编辑我的答案以获得替代解决方案。
    猜你喜欢
    • 2022-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多