自定义 sequelize-cli 生成的 ID

Customizing sequelize-cli generated IDs

使用以下方法创建模型:

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 字段)的定义:我将如何获得 [=16] 的值=]实例的cognitoId(在查询返回的数据中)?
  4. 更改自动生成的 id 字段会产生影响吗?
  5. 字段名是id"magical"吗?即,是否必须将主键 命名为 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 来说是全新的。

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

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