2017-06-15 42 views
0

我爲模型關聯使用了Sails和Waterline,我不知道該怎麼做才能解決我在嘗試更新PageChild對象時收到的錯誤。無法添加或更新子行:外鍵約束失敗CONSTRAINT`PageChild_Page_Id_fk` FOREIGN KEY(`PageId`)REFERENCES`Page`(`Id`)

module.exports = { 
    tableName: 'Page', 
    adapter: 'mysql', 
    autoCreatedAt: false, 
    autoUpdatedAt: false, 

    attributes: { 

     Id: {type: 'integer', autoIncrement: true, primaryKey: true}, 

     pageChildren: { 
      collection: 'PageChild', 
      via: 'Page' 
     } 
    }, 
}; 

module.exports = { 
    tableName: 'PageChild', 
    adapter: 'mysql', 

    attributes: { 

     Id: {type: 'integer', autoIncrement: true, primaryKey: true}, 

     Page: { 
      model: 'Page', 
      columnName: 'PageId' 
     } 
    } 
}; 

模型協會完全正常工作從Page對象填充pageChildren或從任何pageChildren的返回Page對象。但是,在嘗試創建或更新PageChild對象時遇到此外鍵問題。

在mysql數據庫中,Page表具有「Id」屬性,而PageChild表具有「Id」和「PageId」屬性。

回答

1

這意味着您在子行上添加或更新的ParentId需要存在於Parent表中。

所以,這個約束意味着你不能,如果你行插入PageChildPageId = 50,如果你沒有在Page一排有50。

的值。例如一個id要創建一個新頁面,您必須首先在Page表中創建一個條目,然後檢索它的值id,然後才能開始使用之前製作的Page的ID插入到PageChild表中。

2

的錯誤是自我解釋:

foreign key constraint fails CONSTRAINT `PageChild_Page_Id_fk` FOREIGN KEY (`PageId`) REFERENCES `Page` (`Id`) 

的規則是,你只能添加或更新子表中已經存在於父表中的值。因此,在插入時請確保您試圖插入到子表中的值已經存在於父表中。

相關問題