【问题标题】:How do I drop a foreign key using Sequelize.js?如何使用 Sequelize.js 删除外键?
【发布时间】:2020-06-23 23:22:48
【问题描述】:

我知道这可以通过使用原始查询 like the one used in this question to remove a constraint 来实现,但是,是否有任何内置方法可以从 Sequelize.js 中删除外键?

【问题讨论】:

    标签: node.js sequelize.js


    【解决方案1】:

    暂时没有 - https://github.com/sequelize/sequelize/issues/5212

    在我们的团队中,我们使用这种方法,来自QueryGenerator 的方法为您添加了一个技巧

    let dropFKSQL = queryInterface.QueryGenerator.dropForeignKeyQuery("tableName", "foreignKey")
    return queryInterface.sequelize.query(dropForeignKeySQL);
    

    但是带有后缀_ibfk_{index}(由 MySQL 本身)和_idx(由 sequelize)的自动生成外键的差异是一个巨大的痛苦。您可以使用此方法动态获取 FK:

    public getForeignKeyName(tableName: string, columnName: string, opts: { queryInterface: QueryInterface }): Promise<string> {
        let sqlz = opts.queryInterface.sequelize;
        let sql = `
            SELECT CONSTRAINT_NAME
            FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
            WHERE REFERENCED_TABLE_SCHEMA = '${dbSchema}'
              AND TABLE_NAME = '${tableName}'
              AND COLUMN_NAME = '${columnName}'
        `;
    
        return sqlz.query(sql, { type: sqlz.QueryTypes.SELECT })
            .then((result: { CONSTRAINT_NAME: string }[]) => {
                if (!result || !result[0] || !result[0].CONSTRAINT_NAME) {
                    return null;
                }
    
                return result[0].CONSTRAINT_NAME;
            });
    }
    

    【讨论】:

      猜你喜欢
      • 2012-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-14
      • 2018-11-10
      • 2015-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多