2017-06-15 13 views
0

私はモデルの関連付けにSailsとWaterlineを使用しています。私はPageChildオブジェクトを更新しようとしているときにこのエラーを修正するために何をすべきかわかりません。子行を追加または更新できません:外部キー制約は失敗します。CONSTRAINT `PageChild_Page_Id_fk`外部キー(` PageId`)参照 `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のいずれかからページオブジェクトを返すために完璧にうまく動作します。しかし、PageChildオブジェクトを作成または更新しようとすると、この外部キーの問題が発生します。

mysqlデータベースでは、ページテーブルには「Id」属性があり、PageChildテーブルには「Id」属性と「PageId」属性があります。

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

ルールがある、あなただけの追加や、すでに親テーブルに存在する子テーブル内の値を更新することができます

答えて

1

これは、子行で追加または更新するParentIdParentテーブルに存在する必要があることを意味します。

ので、この制約は、あなた場合は、例えば50

の値を持つidを持ってPage内の行を持っていない場合はPageId = 50PageChildに行を挿入できないことを意味します新しいページを作成するには、最初にPageテーブルにエントリを作成してから、idの値を取得してから、PageのIDを使用してPageChildテーブルに挿入を開始する必要があります。

2

エラーは自明です。したがって、挿入時には、子テーブルに挿入しようとしている値が親テーブルに既に存在することを確認してください。

関連する問題