Sequelize belongsToMany自引用不创建外键

时间:2016-09-08 14:07:21

标签: node.js sequelize.js

我创建了一个自引用的belongsToMany关系,其中sequelize与模型作为through参数。

但是,当它创建表时,它只为其中一个关系创建一个外键。

型号:

const client = sequelize.define('client', {
    ClientId: {
        type: DataTypes.UUID,
        primaryKey: true,
        allowNull: false,
        defaultValue: DataTypes.UUIDV4()
    },
    AccessMode: {
        type: DataTypes.ENUM('allow_all', 'deny_all', 'selective'),
        allowNull: false
    }
}, {
    classMethods: {
        associate: function (models) {
            // Tons of other relationships here

            client.belongsToMany(models.client, {
                through: models.clientAccess,
                as: 'clientsWithAccess',
                foreignKey: 'ClientId'
            });

            client.belongsToMany(models.client, {
                through: models.clientAccess,
                as: 'accessToClients',
                foreignKey: 'AccessingClientId'
            });

        }
    }

});

通过型号:

const clientAccess = sequelize.define('clientAccess', {
    Access: {
        type: DataTypes.ENUM('allow', 'deny'),
        allowNull: false
    }
}, {
    timestamps: false
});

结果表只有AccessMode和AccessingClientId列。由于某种原因,AccessingClientId被设置为主键。

如果我切换了belongsToMany()语句的展示位置,那么表格中字段的名称也会反转。

1 个答案:

答案 0 :(得分:0)

这是使用belongsToMany()方法的otherKey属性解决的。

        client.belongsToMany(models.client, {
            through: models.clientAccess,
            as: 'clientsWithAccess',
            foreignKey: 'ClientId',
            otherKey: 'AccessingClientId'
        });

        client.belongsToMany(models.client, {
            through: models.clientAccess,
            as: 'accessToClients',
            foreignKey: 'AccessingClientId',
            otherKey: 'ClientId'
        });

这样就可以在数据库中正确创建表了。