我已经阅读了大量的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中是不可能的,必须在迁移文件级别进行调整。
发布于 2016-11-21 10:37:59
您需要另一个迁移文件来添加该列。
在up函数中,您需要添加
queryInterface.addColumn(
'nameOfAnExistingTable',
'nameofTheNewAttribute',
Sequelize.STRING)在down函数中,您需要
queryInterface.removeColumn(
'nameOfAnExistingTable',
'nameOfTheAttribute')然后运行迁移。
发布于 2017-09-15 21:41:06
如果你想在一次迁移中做多个改变,你可以像这样返回链接的承诺:
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'));
},
};发布于 2018-05-16 06:45:47
我想我和你也有同样的问题。我试图找到一个sequelize命令,它将生成一个包含queryInterface.addColumn的迁移文件。但最终我明白了这不可能只用一个命令就能实现。我们需要先创建迁移文件。
尝试运行sequelize命令以查看所有可用选项。您将知道,如果您运行sequelize model:generate (就像model:create一样),您将同时创建一个包含模型和迁移的新文件。但是您想要迁移文件,但不想要模型文件。这不是正确的命令。
因此,如果您只想添加列,则只需使用sequelize migration:generate命令创建迁移文件。如果您尝试运行该命令,您还会看到另一个选项,请注意,其中有一个名为--name的选项,该选项根据需要进行了描述。只要根据需要给出一个描述性的名称即可。示例命令:sequelize migration:generate --name add-registration-complete-and-currency-column。
最后,使用QueryInterface修改迁移文件,并在模型文件中手动添加该列。我希望它能帮上忙。
https://stackoverflow.com/questions/39009062
复制相似问题