node.js не переносит первичные ключи при переносе - PullRequest
1 голос
/ 08 мая 2019

Это моя create_user_table миграция в моем проекте node.js.

'use strict';

module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.createTable("comments", {
      content: {
        type: Sequelize.STRING(20),
        allowNull: false
      },
      lastName: {
        type: Sequelize.STRING(20),
        allowNull: false
      }
    })
  },

  down: (queryInterface, Sequelize) => {
    return queryInterface.dropTable("comments")
  }
};

После запуска sequelize db: migrate это результат:

sequelize db:migrate

Sequelize CLI [Node: 10.15.2, CLI: 5.4.0, ORM: 5.8.5]

Loaded configuration file "config/config.json".
Using environment "development".
== 20190507193540-create_comment_table: migrating =======
== 20190507193540-create_comment_table: migrated (0.021s)

== 20190507195058-create_user_table: migrating =======
== 20190507195058-create_user_table: migrated (0.011s)

Когда я запускаю describe users; в mysql CLI, таблица не содержит идентификатора?

   +----------+-------------+------+-----+---------+-------+
    | Field    | Type        | Null | Key | Default | Extra |
    +----------+-------------+------+-----+---------+-------+
    | username | varchar(20) | NO   |     | NULL    |       |
    | lastName | varchar(20) | NO   |     | NULL    |       |
    +----------+-------------+------+-----+---------+-------+

И чтобы полностью убедиться, я тоже попробовал.

mysql> show index from users where id = 'PRIMARY';
ERROR 1054 (42S22): Unknown column 'id' in 'where clause'

1 Ответ

1 голос
/ 08 мая 2019

Вы должны вручную объявить поле id в вашей модели и файле миграции, например:

module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.createTable("comments", {
      id: {
        type: Sequelize.INTEGER,
        primaryKey: true,
        autoIncrement: true,
      },
      content: {
        type: Sequelize.STRING(20),
        allowNull: false
      },
      lastName: {
        type: Sequelize.STRING(20),
        allowNull: false
      }
    })
  },

  down: (queryInterface, Sequelize) => {
    return queryInterface.dropTable("comments")
  }
};
...