簡體   English   中英

續集:Model 未關聯到 Model2

[英]Sequelize: Model is not associated to Model2

我正在嘗試使用 Sequelize 中的一些模型進行查詢。 我有 2 個模型,一個是Project ,另一個是Specification 一個項目可以有多個規范,一個規范只能屬於一個項目。 表結構為:

項目:

  • 標題
  • 描述
  • 創建時間
  • 更新時間

規格:

  • 標題
  • 描述
  • ProjectId(Projects 表中的外鍵)

這是我對規范 -> 項目的關系:

Project.belongsToMany(Specification);

我用來檢索數據的 function 就是這個。 基本上它會獲取所有數據,包括所有可能的關聯

// Retrieve all Projects from the database.
exports.findAll = (req, res) => {
  Project.findAll({
  include: [{
    all: true
  }]
})
.then(data => {
  res.send(data);
})
.catch(err => {
  res.status(500).send({
    message:
      err.message || "Some error occurred while retrieving projects."
  });
});
};

最后,我得到的錯誤是:

{"message":"specification is not associated to project!"}

有人可以幫助我或教我如何完成查詢嗎? 我一直在嘗試,但無法得到正確的結果。 謝謝!

如果您將您的結構描述為

一個項目可以有多個規范,一個規范只能屬於一個項目

那么這是一個通常的 1:N 關系,在這種情況下,應該使用hasMany關聯而不是belongsToMany ,因為belingsToMany用於指示 M:N 關系,在這種情況下,您將需要一個聯結表/模型。 也就是說你只需要更換

Project.belongsToMany(Specification);

Project.hasMany(Specification, { foreignKey: 'ProjectId' });

我總是更喜歡明確指出外鍵

使用hasMany而不是belongsToMany來定義關系

Project.hasMany(Specification, {
  foreignKey: { name: 'ProjectId' },
  targetKey: 'ProjectId',
  constraints: false,
  as: 'specifications',
}),

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM