编写菜谱应用程序,并使用 Sequelize 和 MySQL。
有两个相关表:Recipes 表和 RecipeAmounts 表(外键为 RecipeId)。
根据用户输入,食谱可以包含一种或多种成分。添加食谱时,必须填充Recipes和RecipeAmounts表。
我已经使用 Promise 创建了下面的函数,但我不明白如何正确填充 RecipeAmounts 中的 RecipeId 外键。它必须与Recipes表中新添加的菜谱的id相同。
exports.addRecipe = function (req, res) {
var promises = [];
promises.push(
db.Recipe.create({
RecipeName: req.body.RecipeName,
RecipeDescription: req.body.RecipeDescription
})
)
for (var i = 0; i < req.body.RecipeIngredients.length; i++) {
promises.push(
db.RecipeAmount.create({
Amount: req.body.RecipeIngredients[i].AmountForSmall,
Size: 'sm',
Type: 'smoothie',
// IngredientId: 10,
// RecipeId: 1
})
);
promises.push(
db.RecipeAmount.create({
Amount: req.body.RecipeIngredients[i].AmountForMedium,
Size: 'md',
Type: 'smoothie',
// IngredientId: 10,
// RecipeId: 1
})
);
promises.push(
db.RecipeAmount.create({
Amount: req.body.RecipeIngredients[i].AmountForLarge,
Size: 'lg',
Type: 'smoothie',
// IngredientId: 10,
// RecipeId: 1
})
);
}
sequelize.Promise.all(promises).then(function() {
console.log("all the files were created");
});
};
出于测试目的,我尝试对 RecipeId 进行硬编码,但是当我这样做时,我收到此错误:
Unhandled rejection SequelizeForeignKeyConstraintError: Cannot add or update a child row: a foreign key constraint fails
最佳答案
可以使用它:
exports.addRecipe = function (req, res) {
db.Recipe.create({
RecipeName: req.body.RecipeName,
RecipeDescription: req.body.RecipeDescription
}).then(function(newRecipe) {
var promises = [];
for (var i = 0; i < req.body.RecipeIngredients.length; i++) {
var RecipeId = newRecipe.dataValues.id;
console.log(newRecipe.dataValues.id);
promises.push(
db.RecipeAmount.create({
Amount: req.body.RecipeIngredients[i].AmountForSmall,
Size: 'sm',
Type: 'smoothie',
// IngredientId: 10,
RecipeId: RecipeId
})
);
promises.push(
db.RecipeAmount.create({
Amount: req.body.RecipeIngredients[i].AmountForMedium,
Size: 'md',
Type: 'smoothie',
// IngredientId: 10,
RecipeId: RecipeId
})
);
promises.push(
db.RecipeAmount.create({
Amount: req.body.RecipeIngredients[i].AmountForLarge,
Size: 'lg',
Type: 'smoothie',
// IngredientId: 10,
RecipeId: RecipeId
})
);
}
sequelize.Promise.all(promises).then(function() {
console.log('All done YAYYYYYYY!!!!!!!');
});
关于mysql - Sequelize 创建并填充foreignKey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50975190/