簡體   English   中英

Sequelize.js Node.js:如何傳遞已經創建的對象來創建多對多關系?

[英]Sequelize.js Node.js: How to Pass Already Created Object to Create Many-to-Many relationship?

從這篇文章: Node.js / Sequelize.js / Express.js - 如何插入多對多關聯? (同步/異步?)

答案僅在您創建個人和電子郵件時顯示,但是,我想創建一個已創建電子郵件的個人。

正確答案,正確創建個人和電子郵件后:

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對象。

問題記住:

我們是否應該通過電子郵件模型查詢將電子郵件對象轉換為Sequalize對象? 它會起作用嗎?

將該對象轉換為Sequalize的更好方法是什么,因為干凈的代碼和性能有關?

如果我在創建新產品時將多封電子郵件添加到Individual_Email中,該怎么辦? 喜歡超過1個電子郵件ID。

請幫忙咨詢。 謝謝。

你是對的,問題是電子郵件不是一個續集對象。 如果在添加之前從數據庫中檢索它,它將起作用。 另一方面,sequelize允許您通過id設置子項。 所以你可以這樣做:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM