2017-06-14 65 views
3

我是一位新開發人員,正在嘗試自學Sequelize和mysql以及一些小測試項目。我現在所擁有的是一款小型RPG團隊強度分析儀。我有一個單位的SQL表,其中有架構(id,name,elementOne,elementTwo) - 整數,字符串,字符串,字符串。在Heroku上關聯外鍵錯誤,但不是本地測試

現在,elementOne和ElementTwo表都是相同的18個字符串值,因爲我無法弄清楚如何使用外鍵引用同一個表(例如'元素')設置Sequelize查詢。

增加單元表工作正常,在本地服務器上,而是在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

這是MySQL的錯誤,因爲你defin E在您表的外鍵約束,並嘗試插入在不退出在目標表FK場不可用的值,

檢查elementelementTwo表,並確保該值可

相關問題