通过未创建的外键创建连接表

问题描述:

我试图在连续创建一个用户>朋友关系。因此,我通过名为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() 
     } 
    } 
    }); 

这在朋友表中生成以下领域:

id状态createdAt updatedAt

我想以下字段:

id状态用户id friendId createdAt updatedAt

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

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

可以设置otherKeyforeignKey来一个续集关联。我想你应该试试这个:

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

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

+0

我试了一下,我得出的结论是,它并没有解决我的问题,虽然它是一个很好的方式来实现相同的结果。我的问题是,当我初始化每个表时,我直接调用User.sync,当我从每个表中删除同步并且只使用sequelize express示例代码(我正在使用express)进行一次同步时,它就起作用了。 – Bram

+0

我仍然想给你100分的赏金,因为你的回答指向了正确的方向。更新:将在2小时内处理。我还不能授予它;) – Bram