我有一个数据库,用于存储来自两个不同平台的用户。
在一个表中,假设我们有一个名为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'
}
},
});
据我所知,我需要像这样使用
belongsTo
platformA.belongsTo(connect, { foreignKey: 'id', as: 'platformAid' });
platformB.belongsTo(connect, { foreignKey: 'id', as: 'platformBid' });
现在,此代码可以很好地创建表,但是找不到外键。在这一点上,我可能有一些倒退或丢失了一些东西。任何帮助,将不胜感激!
最佳答案
您的连接方式有误。
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
之间创建m:n关系,因为那是使用联接表时的情况,就像您的情况一样。