Sequelize-CLI 添加列到现有模型

Sequelize-CLI Add Column to Existing Model

我已经阅读了大量的 sequelize-cli 文档,但似乎无法弄清楚如何将列添加到我已有的现有模型中。我有一个名为 models/team.js 的模型,我想使用 sequelize model:create --name team --attributes role_name:string 将名为 role_name 的列添加到模型中,但我收到一条消息,要求覆盖而不是修改:

Loaded configuration file "config/config.json".
Using environment "development".
The file /Users/user/Desktop/Projects/node/app-repo/app/models/team.js already exists. Run "sequelize model:create --force" to overwrite it.

我不想覆盖让我认为这不是正确使用命令的文件。这也让我想知道这是否不能从 cli 进行,并且必须在迁移文件级别进行调整。

您需要另一个迁移文件来添加列。

up函数中需要添加

 queryInterface.addColumn(
     'nameOfAnExistingTable',
      'nameofTheNewAttribute',
      Sequelize.STRING)

在down函数中你需要

queryInterface.removeColumn(
      'nameOfAnExistingTable',
      'nameOfTheAttribute')

然后运行迁移。

如果您想在单个迁移中进行多项更改,您可以像这样 return 链式承诺:

module.exports = {
up: function (queryInterface, Sequelize) {
    return queryInterface.addColumn('yourTableName', 'firstNewColumnName', Sequelize.STRING)
        .then(_ => queryInterface.addColumn('yourTableName', 'secondNewColumnName', Sequelize.STRING))
        .then(_ => queryInterface.addColumn('yourTableName', 'thirdNewColumnName', Sequelize.STRING));
    },

down: function (queryInterface, _Sequelize) {
    return queryInterface.removeColumn('yourTableName', 'firstNewColumnName')
        .then(_ => queryInterface.removeColumn('yourTableName', 'secondNewColumnName'))
        .then(_ => queryInterface.removeColumn('yourTableName', 'thirdNewColumnName'));
    },
};

我想我遇到了与您完全相同的问题。我试图找到一个 sequelize 命令,它将为我生成一个包含 queryInterface.addColumn 的迁移文件。但最终我明白这不可能只用一个命令就发生了。我们需要先创建迁移文件。

尝试使用运行 sequelize 命令查看所有可用选项。你会知道,如果你 运行 sequelize model:generate(与 model:create 相同),你将同时创建模型和迁移的新文件。但是你想要迁移文件,但你不想要模型文件。这不是正确的命令。

所以如果你只是想添加列,你需要做的就是使用sequelize migration:generate命令来创建迁移文件。如果您尝试 运行 该命令,您还会看到另一个选项,请注意有一个名为 --name 的选项,它被描述为必需的。只需根据需要提供一个描述性名称即可。示例命令:sequelize migration:generate --name add-registration-complete-and-currency-column.

最后,使用 QueryInterface 修改您的迁移文件并在模型文件中手动添加该列。希望对你有帮助。