【问题标题】:Customizing sequelize-cli generated IDs自定义 sequelize-cli 生成的 ID
【发布时间】:2020-05-25 12:01:04
【问题描述】:

使用以下方法创建模型:

sequelize-cli model:create --name User --attributes "dispName:string,email:string,phoneNum1:string,vendorId:integer"

这导致了以下迁移:

'use strict';
module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.createTable('Users', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      dispName: {
        type: Sequelize.STRING
      },
      // plus others...
    });
  },
  down: (queryInterface, Sequelize) => {
    return queryInterface.dropTable('Users');
  }
};

我想把自动定义的ID改成:

cognitoId: {
  allowNull: false,
  primaryKey: true,
  type: Sequelize.STRING(100)
}

所以:

  1. sequelize 能否将其识别为 ID?
  2. 我需要在哪里进行此更改?我只能识别迁移文件。
  3. 模型文件没有cognitoId 的定义(或原始自动生成的id 字段):我将如何获得User 实例的cognitoId 的值(在查询返回的数据)?
  4. 更改自动生成的 id 字段是否会产生影响?
  5. 字段名称id“神奇”吗?即,主键是否必须命名 id
  6. 有没有更好的方法来做到这一点?
  7. 将字段类型从 Sequelize.STRING 更改为 Sequelize.STRING(100) 是否会产生任何问题?
  8. 为什么 sequelize-cli 生成的模型文件没有定义 id 字段?

从命令行生成模型+迁移时,我找不到任何语法来指定字段的 ID 或任何其他自定义。

使用:

[Node: 12.14.1, CLI: 5.5.1, ORM: 5.21.3]

PS:NodeJS 相对较新,而 Sequelize 则完全陌生。

【问题讨论】:

    标签: node.js sequelize.js sequelize-cli


    【解决方案1】:
    1. 是的
    2. 您应该在模型中声明自定义命名的 PK
    3. 参见第 2 页。如果你没有在你的模型中声明 PK,那么 sequelize 会假设你有一个整数类型的 id PK,自动递增。如果您希望为您的 PK 分配另一个名称,您应该在模型中声明它。
    4. 取决于您所做的更改
    5. 这是sequelize中默认的PK名称(见p.3)。您可以为您的 PK 设置不同的名称,在您的模型中手动声明它(参见第 3 页)
    6. 我个人更喜欢在我的模型中声明所有 PK,即使它们具有 id 名称和默认 PK 类型和值。
    7. 如果所有 PK 值不超过此长度,则没有问题
    8. 见第 3 页

    从命令行生成模型时,您只能为字段定义名称和类型。

    【讨论】:

    • 谢谢! “在从命令行生成模型时,您只能为字段定义名称和类型” 是否有计划在不久的将来随时增强此功能?
    • 好吧,我没有参与 sequilize-cli 的开发,所以我不知道。随意在他们的存储库中创建一个带有建议的新问题。
    猜你喜欢
    • 2017-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    相关资源
    最近更新 更多