gpt4 book ai didi

javascript - 与一个外键关联序列化

转载 作者:行者123 更新时间:2023-12-01 02:20:34 25 4
gpt4 key购买 nike

我有一个最初使用 Django 创建的数据库,该数据库是为单个外键关联设置的 here is the JSON dump.

现在这将被映射为:

export const Category = sequelize.define(
'category',
{
name: { type: Sequelize.STRING, unique: true },
},
{
timestamps: false,
tableName: 'ingredients_category',
}
);

export const Ingredient = sequelize.define(
'ingredient',
{
name: { type: Sequelize.STRING, unique: true },
notes: { type: Sequelize.TEXT, defaultValue: '' },
category_id: {
type: Sequelize.INTEGER,
references: {
model: Category,
key: 'id',
},
},
},
{
timestamps: false,
tableName: 'ingredients_ingredient',
}
);

Category.belongsToMany(Ingredient, {
foreignKey: 'category_id',
constraints: false,
through: 'ingredient_category',
});
Ingredient.hasOne(Category, {
// foreignKey: 'ingredientId',
constraints: false,
});

现在,sequelize 提示它在类别模型上缺少外键,但是虽然成分上只有一个类别,但类别并不限于该一种成分。有人可以帮助我理解这种关联吗?

更新:对于最终答案,这只是一个不正确的关联设置:

export const Category = sequelize.define(
'category',
{
name: { type: Sequelize.STRING, unique: true },
},
{
timestamps: false,
tableName: 'ingredients_category',
}
);

export const Ingredient = sequelize.define(
'ingredient',
{
name: { type: Sequelize.STRING, unique: true },
notes: { type: Sequelize.TEXT, defaultValue: '' },
},
{
timestamps: false,
tableName: 'ingredients_ingredient',
}
);

Category.hasMany(Ingredient, {
foreignKey: 'category_id',
});
Ingredient.belongsTo(Category, {
foreignKey: 'category_id',
});

最佳答案

belongsToMany 用于 N:M 关系,因此 ingredient_category 应该是第三个表。现在,据我了解,您需要一种成分 1:N 类别的关系,因此类别可以有许多成分,所以您应该使用有很多

在您的情况下,您不能使用 hasOne 因为它会在 Categories 上创建成分的外键,而 hasMany 将创建 FK关于成分。

Category.hasMany(Ingredient, {
foreignKey: 'category_id',
constraints: false,
});
Ingredient.belongsTo(Category, {
// foreignKey: 'ingredientId',
constraints: false,
});

Here是文档:

关于javascript - 与一个外键关联序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49245250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com