ОШИБКА: невозможно добавить ограничение внешнего ключа - - PullRequest
0 голосов
/ 27 мая 2020

Я написал приложение nodejs с mysql db и Sequalize как ORM. Все в порядке. Я определяю модели и миграцию для создания базы данных и сидеров. Я хочу создать модель продукта , в которой у меня есть два внешних ключа: (categoryId & shopId).

когда я создавал файлы миграции, я создаю модель магазина за моделью продукта. и это создает для меня проблему. когда я хочу создать таблицу в базе данных с помощью команды «sequelize db: migrate», я получаю эту ошибку:

ОШИБКА: не удается добавить ограничение внешнего ключа

Я прочитал это ссылка и знаю, что это не причина моей проблемы. но как я могу исправить эту ошибку? Я пытаюсь определить вверх и вниз как функцию asyn c, но эта ошибка не устранена.

module.exports = {
up: (queryInterface, Sequelize) => queryInterface.createTable(
  'products', {
    id: {
      allowNull: false,
      autoIncrement: true,
      primaryKey: true,
      type: Sequelize.INTEGER,
    },
    name: {
      type: Sequelize.STRING(255),
      allowNull: false,

    },
    description: {
      type: Sequelize.STRING(1024),
      allowNull: false,

    },
    price: {
      type: Sequelize.FLOAT,
      allowNull: false,
    },
    old_price: {
      type: Sequelize.FLOAT,
      allowNull: false,
    },
    type: {
      type: Sequelize.STRING(255),
    },
    height: {
      type: Sequelize.INTEGER,
    },
    width: {
      type: Sequelize.INTEGER,
    },
    categoryId: {
      type: Sequelize.INTEGER,
      references: {
        model: 'categories',
        key: 'id',
      },
    },
    shopId: {
      type: Sequelize.INTEGER,
      references: {
        model: 'shops',
        key: 'id',
      },
    },
    createdAt: {
      allowNull: false,
      type: Sequelize.DATE,
    },
    updatedAt: {
      allowNull: false,
      type: Sequelize.DATE,
    },
  },
),
down: (queryInterface, Sequelize) => queryInterface.dropTable('products'),
}

1 Ответ

0 голосов
/ 27 мая 2020

Вы передаете model как строку. Вам нужно указать на свой класс.

Попробуйте следующее:

 categoryId: {
      type: Sequelize.INTEGER,
      references: {
        model: categories,
        key: 'id',
      },
    },
...