我有一个数据库,用于存储来自两个不同平台的用户。
在一个表格中,假设我们有一个名为platformA
的表格,其中包含id
,platformAid
,username
。
在第二个表格中,假设我们有一个名为platformB
的表,其中包含id
,platformBid
,username
,level
。
现在,我想创建另一个表,使用两个平台的主键将两个帐户“链接”在一起。理想情况下,该表格如此:id
,platformAid
,platformBid
。
所以,我有像这样定义的数据库模型
var platformA = db.define('platformA', {
id: { type: Sequelize.INTEGER, autoIncrement: true, primaryKey: true },
platformAid: { type: Sequelize.INTEGER },
username: { type: Sequelize.CHAR }
});
var platformB = db.define('platformB', {
id: { type: Sequelize.INTEGER, autoIncrement: true, primaryKey: true },
platformBid: { type: Sequelize.INTEGER },
username: { type: Sequelize.CHAR },
level: { type: Sequelize.INTEGER }
});
var connect = db.define('connect ', {
id: { type: Sequelize.INTEGER, autoIncrement: true, primaryKey: true },
platformAid: {
type: Sequelize.INTEGER,
refrences: {
model: 'platformA',
key: 'id'
}
},
platformBid: {
type: Sequelize.INTEGER,
refrences: {
model: 'platformB',
key: 'id'
}
},
});
据我所知,我需要像{<1}}一样使用
belongsTo
现在这段代码可以很好地创建表,但是没有外键可以找到。在这一点上,我可能有一些倒退或遗漏的东西。任何帮助将不胜感激!
答案 0 :(得分:1)
您正在以错误的方式进行连接。
platformA.belongsTo(connect, { foreignKey: 'id', as: 'platformAid' });
上面的代码指出表id
中的字段platformA
引用表connect
,而id
字段应该是platformA
的主键。 as
属性仅为关联定义alias
,而不是字段。
为了在connect
表上定义引用模型platformA
和platformB
的外键,您需要在connect
模型上定义关联
connect.belongsTo(platformA, { foreignKey: 'platformAid', as: 'platformA' });
此关联指出platformAid
表中的connect
列引用platformA
表。然后你需要对platformB
connect.belongsTo(platformB, { foreignKey: 'platformBid`, as: 'platformB' });
这就是我的评论来自 - 你想在platformA
和platformB
之间创建am:n关系,因为这是在使用连接表的时候,就像你的情况一样。