我一直在阅读大量的sequelize-cli文档,似乎无法弄清楚如何将列添加到我现有的模型中。我有一个名为models/team.js
的模型,并希望将一个名为role_name
的列添加到具有sequelize model:create --name team --attributes role_name:string
的模型中,但是我收到一条要覆盖而不是修改的消息:
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是否无法实现这一点,必须在迁移文件级别进行调整。
答案 0 :(得分:7)
您需要另一个迁移文件来添加列。
在向上功能中,您需要添加
queryInterface.addColumn(
'nameOfAnExistingTable',
'nameofTheNewAttribute',
Sequelize.STRING)
在你需要的向下功能
queryInterface.removeColumn(
'nameOfAnExistingTable',
'nameOfTheAttribute')
然后运行迁移。
答案 1 :(得分:3)
如果您想在单次迁移中进行多项更改,您可以像这样返回链式承诺:
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'));
},
};
答案 2 :(得分:0)
我想我和你有完全相同的问题。我试图找到一个sequelize命令,它将生成一个包含queryInterface.addColumn
的迁移文件。但最终我明白它只能在一个命令中发生。我们需要先创建迁移文件。
尝试运行sequelize
命令以查看所有可用选项。您知道如果您运行sequelize model:generate
(与model:create
一样),您将同时制作模型和迁移的新文件。但是你想要迁移文件,但是你不想要模型文件。这不是正确的命令。
因此,如果您只想添加列,则只需使用sequelize migration:generate
命令创建迁移文件即可。如果您尝试运行该命令,您还会看到其他选项,请注意,这里有一个名为--name
的选项,描述为必需。只需根据需要提供描述性名称。示例命令:sequelize migration:generate --name add-registration-complete-and-currency-column
。
最后,使用QueryInterface
修改您的迁移文件,并手动添加模型文件中的列。我希望它有所帮助。