使用Sequelize多对多模型在源和关联中创建行

时间:2017-03-06 07:46:21

标签: mysql sql node.js sequelize.js

我在用户和群组之间有很多关系。用户有很多组,一个组有很多用户。

我有一个用户表,一个名为usersGroups的组表和联结表。

我的用户模型:

'use strict';
module.exports = function(sequelize, DataTypes) {
  var User = sequelize.define('User', {
    firstName: DataTypes.STRING,
    lastName: DataTypes.STRING,
    email: DataTypes.STRING,
    username: DataTypes.STRING,
    facebookId: DataTypes.STRING,
    password: DataTypes.STRING,
  }, {
    classMethods: {
      associate: function(models) {
        User.hasMany(models.Payment);
        User.hasMany(models.Friend, {foreignKey: 'userIdLink1', allowNull: false});
        User.belongsToMany(models.Group, { as: 'Groups', through: 'usersGroups', foreignKey: 'userId' });
      }
    },
    instanceMethods: {
      toJSON: function () {
        var values = Object.assign({}, this.get());

        delete values.password;
        return values;
      }
    }
  });
  return User;
};

我的小组模特

'use strict';
module.exports = function(sequelize, DataTypes) {
  var Group = sequelize.define('Group', {
  }, {
    classMethods: {
      associate: function(models) {
        // associations can be defined here
        Group.belongsToMany(models.User, { as: 'Users', through: 'usersGroups', foreignKey: 'groupId' });
      }
    },
    instanceMethods: {
      toJSON: function () {
        var values = Object.assign({}, this.get());

        delete values.password;
        return values;
      }
    }
  });
  return Group;
};

当我尝试使用以下两种方法创建一个具有关联用户的新组时,它会创建一个新组但没有关联

const values = {
  userId: 1
}

const options = {
  include: db.Users
}

db.Group
  .create(values, options)
  .then( (group) => {
    res.send(group)
  }).catch(err => {
    res.status(500).send({err: err})
  })

db.Group
  .create()
  .then( (group) => {

    group.addUser({ userId: 1 }).then(result => {
        res.send(result)
    }).catch(err => {
        res.status(500).send({err: err})
    })

  }).catch(err => {
    res.status(500).send({err: err})
  })

1 个答案:

答案 0 :(得分:1)

如果您只想将用户分配给新创建的组,则需要使用addUser,就像您一样,但此方法接受第一个参数作为Model的实例或实例的ID,就像{{{ 3}}说

  

与此关联的实例的实例或主键。

所以你必须执行group.addUser(userId).then(...),在你的情况下group.addUser(1).then(...)