Настройка идентификаторов, сгенерированных sequelize-cli - PullRequest
0 голосов
/ 10 февраля 2020

Создана модель с использованием:

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');
  }
};

Я хочу изменить автоматически определенный идентификатор на:

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

Итак:

  1. Сможет ли sequelize распознать это как идентификатор?
  2. Где все, что мне нужно для этого изменения? Я мог только идентифицировать файл миграции.
  3. В файле модели нет определения для cognitoId (или оригинального автоматически сгенерированного поля id): как я смогу получить значение cognitoId * * экземпляра User (в данных, возвращаемых запросами)?
  4. Будет ли изменение автоматически сгенерированного поля id иметь последствия в строке?
  5. Является ли имя поля id "волшебный"? Т.е. первичный ключ должен называться id?
  6. Есть ли лучший способ сделать это?
  7. Будет ли изменение типы полей от Sequelize.STRING до Sequelize.STRING(100) создают проблемы в дальнейшем?
  8. Почему в файле моделей, сгенерированном sequelize-cli, не определено поле id?

При генерации моделей + миграций из командной строки я не смог найти синтаксис для указания идентификатора или любую другую настройку для полей.

Использование:

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

PS: относительно новый для NodeJS и совершенно новый для Sequelize.

1 Ответ

1 голос
/ 11 февраля 2020
  1. Да
  2. Вы должны объявить пользовательское имя PK в вашей модели
  3. см. Стр.2. Если вы не объявляете PK в своей модели, тогда sequelize предполагает, что у вас есть id PK с целочисленным типом, автоинкрементным. Если вы хотите sh присвоить вашему ПК другое имя, вы должны объявить его в модели.
  4. Зависит от того, какие изменения вы вносите
  5. Это имя ПК по умолчанию в sequelize (см. Стр. 3). Вы можете установить другое имя для вашего ПК вручную, объявив его в вашей модели (см. Стр.3)
  6. Лично я предпочитаю объявлять все PK в моих моделях, даже если они имеют имя id и значение по умолчанию Тип и значение PK.
  7. Нет проблем, если все значения PK не превышают эту длину
  8. см. Стр.3

Вы можете определять имена и типы только для полей при генерации моделей из командной строки.

...