Seqeulize外键未被创建(对于MySQL)

时间:2017-03-08 18:14:48

标签: mysql node.js sequelize.js

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

在一个表格中,假设我们有一个名为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'
        }
    },
});

据我所知,我需要像{<1}}一样使用

belongsTo

现在这段代码可以很好地创建表,但是没有外键可以找到。在这一点上,我可能有一些倒退或遗漏的东西。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

您正在以错误的方式进行连接。

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之间创建am:n关系,因为这是在使用连接表的时候,就像你的情况一样。