我是新开发者,我正在尝试用一些小测试项目教自己Sequelize和mysql。我现在拥有的是一个小RPG团队力量分析器。我有一个单元的SQL表,它有模式(id,name,elementOne,elementTwo) - 整数,字符串,字符串,字符串。
现在,elementOne和ElementTwo表都是相同的18个字符串值,因为我无法弄清楚如何使用外键refs设置Sequelize查询到同一个表(例如只是'elements')。
添加到Unit表可以在本地服务器上正常工作,但在尝试添加第三个单元时,仅在Heroku上中断,并出现以下错误:
Error was: { SequelizeForeignKeyConstraintError: Cannot add or update a child
row: a foreign key constraint fails (`heroku_f4daeab1e260595`.`units`,
CONSTRAINT `units_ibfk_1` FOREIGN KEY (`id`) REFERENCES `elementtwos` (`id`)
ON DELETE CASCADE ON UPDATE CASCADE)
以下是所有表格和关系声明。
const Unit = sequelize.define('unit', {
id: {
type: Sequelize.INTEGER,
allowNull: false,
unique: true,
primaryKey: true,
autoIncrement: true
},
name: {
type: Sequelize.STRING,
allowNull: false,
unique: false
},
image: {
type: Sequelize.STRING,
allowNull: true,
unique: false
},
elementOne: {
type: Sequelize.INTEGER,
allowNull: true,
references: {
model: Element,
key: 'id'
}
},
elementTwo: {
type: Sequelize.INTEGER,
allowNull: true,
defaultValue: 10001,
references: {
model: ElementTwo,
key: 'id'
}
}
});
const Element = sequelize.define('element', {
id: {
type: Sequelize.INTEGER,
allowNull: false,
unique: true,
primaryKey: true,
autoIncrement: true
},
name: {
type: Sequelize.STRING,
allowNull: false,
unique: false
}
});
const ElementTwo = sequelize.define('elementtwo', {
id: {
type: Sequelize.INTEGER,
allowNull: false,
unique: true,
primaryKey: true,
autoIncrement: true
},
name: {
type: Sequelize.STRING,
allowNull: false,
unique: false
}
});
在这些全部加载后,我设置了以下内容:
Unit.belongsTo(Element, {foreignKey: 'elementOne'});
Unit.belongsTo(ElementTwo, {foreignKey: 'elementTwo'});
ElementTwo.hasMany(Unit, {foreignKey: 'id'});
Element.hasMany(Unit, {foreignKey: 'id'});
这是Sequelize正在进行的查询(在Unit.create({...})中:
INSERT INTO `units`
(`id`,`name`,`image`,`elementOne`,`elementTwo`,`createdAt`,`updatedAt`) VALUES
(DEFAULT,'raichu','http://longimgurl.png',13,10001,'2017-06-14
12:57:54','2017-06-14 12:57:54');
如果有人可以提供任何建议,我们将不胜感激。
答案 0 :(得分:1)
这是mysql错误,因为您在表上定义了外键约束并尝试在fk字段中插入不在目标表中退出的不可用值,
检查element
和elementTwo
表并确保此值可用