Join 通过未创建的外键续写联接表

Join 通过未创建的外键续写联接表,join,express,many-to-many,sequelize.js,Join,Express,Many To Many,Sequelize.js,我正在尝试在sequelize中创建用户>朋友关系。因此,我通过一个名为friends的连接表创建了一个用户模型和一个归属关系。它创建了表,但没有创建foreignKeys userId和friendId。如果有人能帮我,我会很高兴的 用户模型: var User = sequelize.define('user', { id: { type: Sequelize.INTEGER, autoIncrement: true, primaryKey: tr

我正在尝试在sequelize中创建用户>朋友关系。因此,我通过一个名为friends的连接表创建了一个用户模型和一个归属关系。它创建了表,但没有创建foreignKeys userId和friendId。如果有人能帮我,我会很高兴的

用户模型:

var User = sequelize.define('user', {
    id: {
      type: Sequelize.INTEGER,
      autoIncrement: true,
      primaryKey: true
    },
    emailaddress: {
      type: Sequelize.STRING
    },
    firstname: {
      type: Sequelize.STRING
    },
    lastname: {
      type: Sequelize.STRING
    },
    description: {
      type: Sequelize.STRING
    },
    password: {
      type: Sequelize.STRING
    }
  }, {
    freezeTableName: true, 
    classMethods: {
      associate: function (models) {
        User.belongsToMany(models.user, {
          as: "user",
          through: "friend"
        });
        User.belongsToMany(models.user, {
          as: "friend",
          through: "friend"
        });
        User.sync({
            force: true
          })
      }
    }
  });
朋友模型

var Friend = sequelize.define('friend', {
    // userId: DataTypes.INTEGER,
    // friendId: DataTypes.INTEGER,
    status: {
      type: DataTypes.BOOLEAN,
      defaultValue: 0
    }
  }, {
    freezeTableName: true,
    classMethods: {
      associate: function (models) {
        Friend.sync()
      }
    }
  });
这将在朋友表中生成以下字段:

id状态createdAt updatedAt

我想要以下字段:

id状态userId friendId createdAt updatedAt


package.json>“sequelize”:“^3.17.1”,

您可以将
otherKey
foreignKey
设置为sequelize。我想你应该试试这个:

User.belongsToMany(models.user, {
    as: "friends",
    through: "friend",
    otherKey: 'userId',
    foreignKey: 'friendId'
});

很抱歉,我现在无法尝试,但我希望它能帮助您。

经过一些调试后,我发现问题在于我在初始化每个表时调用了Table.sync,而不是在定义所有表时只调用一次(请参阅github上sequelize express示例中的示例代码:)。这破坏了表的创建过程。

我尝试了一下,得出的结论是,它并没有解决我的问题,尽管这是一种很好的方法,可以获得相同的结果。我的问题是,当初始化每个表时,我直接调用User.sync,当我从每个表中删除同步时,使用sequelize express示例代码(我使用的是express)只进行了一次同步时,它起了作用。我仍然希望将100奖金分配给您,因为您的回答为我指明了正确的方向。更新:将在2小时内处理。我还不允许授予它;)