mysql - 错误 : Cannot add foreign key constraint-

标签 mysql node.js sequelize.js

我用 mysql db 和 Sequalize 作为 ORM 编写了一个 nodejs 应用程序。一切正常。我定义模型和迁移以创建数据库和播种机。我想创建一个 产品模型 ,在这个模型中我有两个外键:(categoryId 和 shopId)。

当我创建迁移文件时,我在产品模型之后创建商店模型。这对我来说是一个问题。当我想使用“sequelize db:migrate”命令在数据库中创建表时,出现此错误:

错误:无法添加外键约束

我读了这个 link 并且知道这不是我的问题的原因。
但我该如何解决这个错误?我尝试将 up 和 down 定义为异步函数,但此错误未解决。

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

最佳答案

您将 model 作为字符串传递。你需要指向你的类(class)。

试试这个:

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

关于mysql - 错误 : Cannot add foreign key constraint-,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62046169/

相关文章:

javascript - 如何在类里面调用它,例如 forEach?

Javascript Nodejs 值未插入数组

mysql - 统计已经统计和分组的表的结果行

MySql,SELECT * FROM 带索引列

mysql - 如何在 MySQL 中调度存储过程

mysql - 依赖于选择查询的组的最常见值

javascript - Node.js 中的 for 循环顺序错误(谷歌日历 api、mongojs)

orm - 使用 Sequelize 连接 3 个表

node.js - Sequelize - 运行同步正在构建多个版本的表,这些表具有不同的 FK 文件名和不同版本中的初始化值

mysql - 为什么所有的 Sequelize 示例模型都是用 Model(sequelize, Sequelize) 实例化的?