如何在sequelize中定义外键的名称

时间:2016-12-21 15:32:14

标签: mysql node.js sequelize.js

例如,我有几个由这个伪代码表示的表:

let user = sequelize.define('User', /* attributes */);
let task = sequelize.define('Task', /* attributes */);

task.belongsTo(user, { foreignKey: "userId" });

sequelize.sync();

生成的task表:

CREATE TABLE `task` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `userId` INT(11) NULL DEFAULT NULL,
    PRIMARY KEY (`id`),
    INDEX `userId` (`userId`),
    CONSTRAINT `task_ibfk_1` FOREIGN KEY (`userId`) REFERENCES `user` (`id`) ON UPDATE CASCADE ON DELETE NO ACTION
)

它会生成外键名task_ibfk_1

所以问题是:

  1. 如何通过sequelize手动更改列的外键名称?
  2. 是否可以以相同的方式为迁移创建索引和外键?
  3. 是否可以通过sequelize创建外键?
  4. 在某些情况下,我使用query-generator,但它没有提供太多。

    注意:

    正如我现在所看到的(2016年12月21日)此功能正在进行很长时间:https://github.com/sequelize/sequelize/issues/5212

    相关问题:https://github.com/sequelize/sequelize/issues/966

1 个答案:

答案 0 :(得分:0)

这是我使用迁移的解决方案:

'use strict';

module.exports = {
  up: function (queryInterface, Sequelize) {
    return queryInterface.sequelize.query("ALTER TABLE task ADD CONSTRAINT task_ibfk_1 FOREIGN KEY (idUser) REFERENCES user(id) ON UPDATE CASCADE ON DELETE NO ACTION;");
  },

  down: function (queryInterface, Sequelize) {
    return queryInterface.sequelize.query("ALTER TABLE task DROP FOREIGN KEY task_ibfk_1;");
  }
};