Sequelize.js Node.js: 如何将已创建的对象传递给创建多对多关系?

3
从这篇文章开始:Node.js / Sequelize.js / Express.js - How to insert into many-to-many association? (sync/async?)

答案只展示了当你创建Individual和Email时,然而我想要创建一个已经创建好的电子邮件的个人。

正确创建个人和电子邮件之后的原始答案:

models.Individual.create({
  name: "Test"
}).then(function(createdIndividual) { // note the argument
  models.Email.create({
    address: "test@gmail.com"
  }).then(function(createdEmail) { // note the argument
    createdIndividual.addEmail(createdEmail)
      .then(function(addedEmail) { // note th-- well you get the idea :)
        console.log("Success");
      });
  })
});

为了创建一个已有电子邮件地址的个人账户,我进行了如下修改:
models.Individual.create({
  name: "Test"
}).then(function(createdIndividual) { // note the argument
    //This email id exists in the Email table.
    var email = {
        id: 1
    }
    createdIndividual.addEmail(email)
    .then(function(addedEmail) {
        console.log("Success");
    });
});

然后我收到了这个错误:
Unhandled rejection TypeError: val.replace is not a function
        at Object.SqlString.escape (/Users/Roller/Working/Web/ponds_web/node_modules/sequelize/lib/sql-string.js:63:15)
        at Object.QueryGenerator.escape (/Users/Roller/Working/Web/ponds_web/node_modules/sequelize/lib/dialects/abstract/query-generator.js:977:22)
        at /Users/Roller/Working/Web/ponds_web/node_modules/sequelize/lib/dialects/abstract/query-generator.js:2203:23
        at Array.map (native)
        at Object.QueryGenerator.whereItemQuery (/Users/Roller/Working/Web/ponds_web/node_modules/sequelize/lib/dialects/abstract/query-generator.js:2202:49)
        at /Users/Roller/Working/Web/ponds_web/node_modules/sequelize/lib/dialects/abstract/query-generator.js:1903:25
        at /Users/Roller/Working/Web/ponds_web/node_modules/sequelize/node_modules/lodash/lodash.js:4389:15
        at baseForOwn (/Users/Roller/Working/Web/ponds_web/node_modules/sequelize/node_modules/lodash/lodash.js:2652:24)
        at Function.forOwn (/Users/Roller/Working/Web/ponds_web/node_modules/sequelize/node_modules/lodash/lodash.js:12254:24)
        at Object.QueryGenerator.whereItemsQuery (/Users/Roller/Working/Web/ponds_web/node_modules/sequelize/lib/dialects/abstract/query-generator.js:1902:9)
        at Object.QueryGenerator.getWhereConditions (/Users/Roller/Working/Web/ponds_web/node_modules/sequelize/lib/dialects/abstract/query-generator.js:2337:19)
        at Object.QueryGenerator.selectQuery (/Users/Roller/Working/Web/ponds_web/node_modules/sequelize/lib/dialects/abstract/query-generator.js:1451:28)
        at QueryInterface.select (/Users/Roller/Working/Web/ponds_web/node_modules/sequelize/lib/query-interface.js:669:25)
        at .<anonymous> (/Users/Roller/Working/Web/ponds_web/node_modules/sequelize/lib/model.js:1390:32)
        at tryCatcher (/Users/Roller/Working/Web/ponds_web/node_modules/bluebird/js/release/util.js:16:23)
        at Promise._settlePromiseFromHandler (/Users/Roller/Working/Web/ponds_web/node_modules/bluebird/js/release/promise.js:504:31)

我认为这个错误是因为我的电子邮件对象不是Sequelize对象。

心中的问题:

我们应该通过从Email模型查询来将电子邮件对象转换为Sequalize对象吗?这样会有效吗?

在考虑代码清晰和性能的情况下,将该对象转换为Sequalize的更好方法是什么?

如果我要在创建新产品时添加多个电子邮件到Individual_Email中怎么办?例如,有多个电子邮件ID。

请帮忙提供建议。谢谢。


请查看此链接:http://stackoverflow.com/a/38305458/1159775 - hebinda
1个回答

0

你说得对,问题在于电子邮件不是sequelize对象。如果在添加之前从数据库中检索它,则可以正常工作。另一方面,sequelize允许您通过id设置子项。因此,您可以像这样做:

models.Individual.create({
  name: "Test"
}).then(function(createdIndividual) {
    createdIndividual.setEmails([emailIds]) //emails id array
    .then(function() {
        console.log("Success");
    });
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接