通过未创建的外键创建连接表
问题描述:
我试图在连续创建一个用户>朋友关系。因此,我通过名为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) 。这破坏了表格创建过程。
答
可以设置otherKey
和foreignKey
来一个续集关联。我想你应该试试这个:
User.belongsToMany(models.user, {
as: "friends",
through: "friend",
otherKey: 'userId',
foreignKey: 'friendId'
});
对不起,我现在不能尝试它,但我希望,它可以帮助你。
我试了一下,我得出的结论是,它并没有解决我的问题,虽然它是一个很好的方式来实现相同的结果。我的问题是,当我初始化每个表时,我直接调用User.sync,当我从每个表中删除同步并且只使用sequelize express示例代码(我正在使用express)进行一次同步时,它就起作用了。 – Bram
我仍然想给你100分的赏金,因为你的回答指向了正确的方向。更新:将在2小时内处理。我还不能授予它;) – Bram