Javascript 使用一个外键继续关联
我有一个最初使用Django创建的数据库,它是为单个外键关联设置的 现在,这将映射为:Javascript 使用一个外键继续关联,javascript,sqlite,sequelize.js,Javascript,Sqlite,Sequelize.js,我有一个最初使用Django创建的数据库,它是为单个外键关联设置的 现在,这将映射为: export const Category = sequelize.define( 'category', { name: { type: Sequelize.STRING, unique: true }, }, { timestamps: false, tableName: 'ingredients_category', } ); export const In
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',
});
belongtomany
用于关系N:M,因此component\u category
应该是第三个表。现在,据我所知,您需要一个关系,其中成分
1:N类别
,因此类别
可以包含许多成分,因此您应该使用hasMany
在您的案例中,您不能使用hasOne
,因为它会在类别上创建配料的外键,而hasMany
会在配料上创建FK
Category.hasMany(Ingredient, {
foreignKey: 'category_id',
constraints: false,
});
Ingredient.belongsTo(Category, {
// foreignKey: 'ingredientId',
constraints: false,
});
是文档:属于一个关系N:M,因此成分\u类别
应该是第三个表。现在,据我所知,您需要一个关系,其中成分
1:N类别
,因此类别
可以包含许多成分,因此您应该使用hasMany
在您的案例中,您不能使用hasOne
,因为它会在类别上创建配料的外键,而hasMany
会在配料上创建FK
Category.hasMany(Ingredient, {
foreignKey: 'category_id',
constraints: false,
});
Ingredient.belongsTo(Category, {
// foreignKey: 'ingredientId',
constraints: false,
});
文件是否: