首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sequelize-CLI将列添加到现有模型

Sequelize-CLI将列添加到现有模型
EN

Stack Overflow用户
提问于 2016-08-18 10:29:00
回答 3查看 6.9K关注 0票数 4

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

代码语言:javascript
复制
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中是不可能的,必须在迁移文件级别进行调整。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-11-21 10:37:59

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

在up函数中,您需要添加

代码语言:javascript
复制
 queryInterface.addColumn(
     'nameOfAnExistingTable',
      'nameofTheNewAttribute',
      Sequelize.STRING)

在down函数中,您需要

代码语言:javascript
复制
queryInterface.removeColumn(
      'nameOfAnExistingTable',
      'nameOfTheAttribute')

然后运行迁移。

票数 10
EN

Stack Overflow用户

发布于 2017-09-15 21:41:06

如果你想在一次迁移中做多个改变,你可以像这样返回链接的承诺:

代码语言:javascript
复制
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'));
    },
};
票数 3
EN

Stack Overflow用户

发布于 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修改迁移文件,并在模型文件中手动添加该列。我希望它能帮上忙。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39009062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档