【问题标题】:ERROR: Cannot add foreign key constraint-错误:无法添加外键约束-
【发布时间】:2020-09-14 16:11:10
【问题描述】:

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

【问题讨论】:

    标签: mysql node.js sequelize.js


    【解决方案1】:

    您将 model 作为字符串传递。您需要指向您的班级。

    试试这个:

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

    【讨论】:

      猜你喜欢
      • 2018-04-05
      • 1970-01-01
      • 2013-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-02
      相关资源
      最近更新 更多