Mysql Sequelize.js Node.js:如何传递已经创建的对象来创建多对多关系?

Mysql Sequelize.js Node.js:如何传递已经创建的对象来创建多对多关系?,mysql,node.js,express,Mysql,Node.js,Express,从本帖: 答案仅在您创建个人和电子邮件时显示,但是,我希望使用已创建的电子邮件创建个人 正确创建个人和电子邮件的原始答案: models.Individual.create({ name: "Test" }).then(function(createdIndividual) { // note the argument models.Email.create({ address: "test@gmail.com" }).then(function(createdEmail)

从本帖:

答案仅在您创建个人和电子邮件时显示,但是,我希望使用已创建的电子邮件创建个人

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

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)
未处理的拒绝类型错误:val.replace不是函数
在Object.SqlString.escape(/Users/Roller/Working/Web/ponts\u Web/node\u modules/sequelize/lib/sql string.js:63:15)
在Object.QueryGenerator.escape(/Users/Roller/Working/Web/ponds\u Web/node\u modules/sequelize/lib/dialogs/abstract/QueryGenerator.js:977:22)
at/Users/Roller/Working/Web/ponds\u Web/node\u modules/sequelize/lib/dialogs/abstract/query generator.js:2203:23
at Array.map(本机)
在Object.QueryGenerator.whereItemQuery(/Users/Roller/Working/Web/ponds\u Web/node\u modules/sequelize/lib/dialogs/abstract/query generator.js:2202:49)
at/Users/Roller/Working/Web/ponds\u Web/node\u modules/sequelize/lib/dialogs/abstract/query generator.js:1903:25
at/Users/Roller/Working/Web/ponds\u Web/node\u modules/sequelize/node\u modules/lodash/lodash.js:4389:15
在baseForOwn(/Users/Roller/Working/Web/ponds\u Web/node\u modules/sequelize/node\u modules/lodash/lodash.js:2652:24)
在Function.forOwn(/Users/Roller/Working/Web/ponds\u Web/node\u modules/sequelize/node\u modules/lodash/lodash.js:12254:24)
在Object.QueryGenerator.whereItemsQuery(/Users/Roller/Working/Web/ponts\u Web/node\u modules/sequelize/lib/dialogs/abstract/query generator.js:1902:9)
在Object.QueryGenerator.getWhereConditions(/Users/Roller/Working/Web/ponds\u Web/node\u modules/sequelize/lib/dialogs/abstract/query generator.js:2337:19)
在Object.QueryGenerator.selectQuery(/Users/Roller/Working/Web/ponds\u Web/node\u modules/sequelize/lib/dialogs/abstract/query generator.js:1451:28)
在QueryInterface.select(/Users/Roller/Working/Web/ponds\u Web/node\u modules/sequelize/lib/query interface.js:669:25)
在(/Users/Roller/Working/Web/ponds\u Web/node\u modules/sequelize/lib/model.js:1390:32)
在tryCatcher(/Users/Roller/Working/Web/ponds\u Web/node\u modules/bluebird/js/release/util.js:16:23)
在Promise._settlePromiseFromHandler(/Users/Roller/Working/Web/ponds\u Web/node\u modules/bluebird/js/release/Promise.js:504:31)
我认为这个错误是因为我的电子邮件对象不是Sequelize对象

心中的问题:

我们是否应该通过电子邮件模型的查询将电子邮件对象转换为Sequalize对象?行吗

考虑到干净的代码和性能,将该对象转换为Sequalize的更好方法是什么

如果我在创建新产品时有多封电子邮件要添加到个人电子邮件中,该怎么办?喜欢超过1个电子邮件ID


请帮忙给我一些建议。谢谢

你是对的,问题是电子邮件不是sequelize对象。若您在添加它之前从数据库中检索它,那个么它就可以工作了。另一方面,sequelize允许您按id设置childs。因此您可以执行以下操作:

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