首页 文章

通过未创建的外键来续订连接表

提问于
浏览
3

我试图在sequelize中创建用户>朋友关系 . 因此,我通过名为friends的连接表创建了用户模型和belongsToMany关系 . 它创建了表,但是没有创建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()
      }
    }
  });

这会在friend表中生成以下字段:

id status createdtt updatedAt

我想要以下字段:

id status userId friendId createdAt updatedAt

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

2 回答

  • 2

    您可以将 otherKeyforeignKey 设置为续集关联 . 我想你应该试试这个:

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

    对不起,我现在不能尝试,但我希望,它可以帮到你 .

  • 2

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

相关问题