【问题标题】:Creating new instances for a Many to Many relationship using Sequelize使用 Sequelize 为多对多关系创建新实例
【发布时间】:2017-05-18 16:14:31
【问题描述】:

我正在使用 NodeJS、Express、Sequelize 和 PostgreSQL。

我有两个模型。 “用户”模型和“社交”模型。我想要一个多对多的关系,所以一个用户可以有很多社交,一个社交可以有很多用户。

这是我到目前为止的代码。我知道“belongsToMany”创建了一个新的 Join 表,我可能会尝试太多,因为这看起来过于复杂。

模型/user.js:

'use strict';
module.exports = function(sequelize, DataTypes) {
  var User = sequelize.define('User', {
    username: DataTypes.STRING
  }, {
    classMethods: {
      associate: function(models) {
        User.belongsToMany(models.Social, {through: 'User_Social', foreignKey: 'User_rowId'})

      }
    }
  });
  return User;
};

模型/social.js:

'use strict';
module.exports = function(sequelize, DataTypes) {
  var Social = sequelize.define('Social', {
    title: DataTypes.STRING,
    description: DataTypes.TEXT
  }, {
    classMethods: {
      associate: function(models) {
        Social.belongsToMany(models.User, {through: 'User_Social', foreignKey: 'Social_rowId'})
      }
    }
  });
  return Social;
};

路由/users.js

router.post('/:UserId/socials', function(req, res) {
  userPromise = models.User.findById(req.params.UserId)

  userPromise.then(function(user) {
    models.Social.create({
    title: req.body.title,
    description: req.body.description
  })
  .then(function (social) {
    user.addSocials([social, social.id])
  })
  .then(function() {
    res.redirect('/');
  });  
  })


});

当我尝试使用我网站上的表单创建新社交时,这是我在控制台中遇到的错误:

Unhandled rejection SequelizeUniqueConstraintError: Validation error
    at Query.formatError (meetup-app/node_modules/sequelize/lib/dialects/postgres/query.js:326:16)
    at null.<anonymous> (meetup-app/node_modules/sequelize/lib/dialects/postgres/query.js:88:19)
    at emitOne (events.js:77:13)
    at emit (events.js:169:7)
    at Query.handleError (meetup-app/node_modules/pg/lib/query.js:131:8)
    at null.<anonymous> (meetup-app/node_modules/pg/lib/client.js:180:26)
    at emitOne (events.js:77:13)
    at emit (events.js:169:7)
    at Socket.<anonymous> (meetup-app/node_modules/pg/lib/connection.js:121:12)
    at emitOne (events.js:77:13)
    at Socket.emit (events.js:169:7)
    at readableAddChunk (_stream_readable.js:146:16)
    at Socket.Readable.push (_stream_readable.js:110:10)
    at TCP.onread (net.js:523:20)

任何帮助将不胜感激!

【问题讨论】:

  • 这不是一个好问题,因为您没有隔离 routes/users.js 中发生错误的位置
  • 我没有查看所有代码,但这里 user.addSocials([social, social.id]) 也许应该是 user.addSocials(social)

标签: javascript node.js postgresql express sequelize.js


【解决方案1】:

错误是您创建了两个具有相同 id 的 social 实例,这应该是唯一的。添加该关联的正确方法是通过 user.addSocial(social)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-12
    • 2019-08-24
    • 2022-12-15
    • 2016-08-24
    • 2017-08-08
    • 2020-10-31
    • 2017-09-11
    • 2021-11-05
    相关资源
    最近更新 更多