[英]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.