在Heroku上查询外键错误,但不是本地测试

时间:2017-06-14 13:19:52

标签: javascript mysql heroku foreign-keys sequelize.js

我是新开发者,我正在尝试用一些小测试项目教自己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');

如果有人可以提供任何建议,我们将不胜感激。

1 个答案:

答案 0 :(得分:1)

这是mysql错误,因为您在表上定义了外键约束并尝试在fk字段中插入不在目标表中退出的不可用值,

检查elementelementTwo表并确保此值可用