mysql - 错误:无法添加外键约束-
问题描述
我用 mysql db 和 Sequalize 作为 ORM 编写了一个 nodejs 应用程序。一切正常。我定义模型和迁移以创建数据库和播种机。我想创建一个产品模型,在这个模型中我有两个外键:(categoryId 和 shopId)。
当我创建迁移文件时,我在产品模型之后创建商店模型。这对我来说是个问题。当我想使用“sequelize db:migrate”命令在数据库中创建表时,我收到此错误:
错误:无法添加外键约束
我阅读了这个链接并且知道这不是我的问题的原因。但是我该如何解决这个错误?我尝试将 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
as 字符串。你需要指向你的班级。
尝试这个:
categoryId: {
type: Sequelize.INTEGER,
references: {
model: categories,
key: 'id',
},
},
推荐阅读
- c# - “值不能为空。参数名称:源”同时从视图中的连接表添加项目
- python - 使用 for 循环将 pandas 数据框附加到字典中
- c# - Visual Studio 从同一网络中的另一台计算机调试 Web 应用程序
- c# - 即使我克隆列表,列表中对象的参数也会发生变化
- php - 使用 PHP 创建 chown 文件夹/文件
- excel - 社交媒体和电子邮件提取代码需要更新
- sql - 为 Oracle 函数定义一个 CLOB 输入参数(或使用 CLOB 输入参数定义一个函数)
- python - 如何使用 matplolib 设置时间序列多图配置
- android - Android:一个清单中有多个启动器
- php - Mac OS Catalina 上的 my.cnf 或 mysql.conf 在哪里?