簡體   English   中英

使用連接表續寫自我關系

[英]Sequelize Self Relationship with junction table

我想建立一個續集關系,表示: An item is composed by a specific amount of others items

數據庫表

Item (itemId, name)
Ingredient (ingredientId, itemParentId, itemChildrenId, amount)

續集模型

// Item.js
class Item extends Sequelize.Model { }
Item.init({
  itemId: {
    type: Sequelize.INTEGER,
    autoIncrement: true,
    primaryKey: true
  },
  name: Sequelize.STRING,
}, {
  sequelize: db,
})

// Ingredient.js
class Ingredient extends Sequelize.Model { }
Ingredient.init({
  ingredientId: {
    type: Sequelize.INTEGER,
    autoIncrement: true,
    primaryKey: true
  },
  amount: Sequelize.INTEGER,
}, {
  sequelize: db,
})

我只是想編寫正確的續集關聯來匹配我的數據庫邏輯,所以我嘗試了:

// Association.js
Item.belongsToMany(Item, { through: Ingredient, as: 'ingredients', foreignKey: 'itemParentId' })

但是我Unknown column 'ingredients->ingredient.ingredientItemId' in 'field list'有這個錯誤Unknown column 'ingredients->ingredient.ingredientItemId' in 'field list' ,這是真的,但我不知道如何指定正確的鍵/列。

任何幫助,請!

我看到的問題很少:首先,您在 Ingredient 模型中執行 Item.init。 可能是你的錯誤。 將其更改為 Ingredient.init。(我個人從未使用過這個“init”api,我對模型的定義不同,所以我不確定它是如何工作的)

其次,將 Ingredient 和 Item 的主鍵更改為“id”,例如:

id: {
    type: Sequelize.INTEGER,
    autoIncrement: true,
    primaryKey: true
  }

此外,您的關聯不正確,它需要通過連接表:

Item.belongsToMany(Ingredient, { through: "ItemIngredient"})

請注意,“通過”在這里指的是一個表名,如果您使用 model.sync(),Sequelize 將自動創建,如果不是,您將需要自己創建它(或使用我推薦的遷移),列:itemId,成分Id。

您還需要添加“反向”關聯,如下所示:

Ingredient.belongsToMany(Item, { through: "ItemIngredient"})

暫無
暫無

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

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