我有一个数据库,用于存储来自两个不同平台的用户。

在一个表中,假设我们有一个名为platformA的表,其中包含idplatformAidusername

在第二张表中,假设我们有一个名为platformB的表,其中包含idplatformBidusernamelevel

现在,我想创建另一个表,以使用来自两个平台的主键将两个帐户“链接”在一起。理想情况下,该表将如下所示:idplatformAidplatformBid

所以,我有这样定义的数据库模型

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表上定义引用模型platformAplatformB的外键,您需要在connect模型上定义关联

connect.belongsTo(platformA, { foreignKey: 'platformAid', as: 'platformA' });


此关联表明platformAid表中的connect列引用platformA表。然后您需要对platformB做同样的事情

connect.belongsTo(platformB, { foreignKey: 'platformBid`, as: 'platformB' });


那就是我的评论的来源-您是否要在platformAplatformB之间创建m:n关系,因为那是使用联接表时的情况,就像您的情况一样。

08-07 00:19