mysql - Sequelize 创建并填充foreignKey

标签 mysql promise foreign-keys sequelize.js

编写菜谱应用程序,并使用 Sequelize 和 MySQL。

有两个相关表:Recipes 表和 RecipeAmounts 表(外键为 RecipeId)。

根据用户输入,食谱可以包含一种或多种成分。添加食谱时,必须填充RecipesRecipeAmounts表。

我已经使用 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/

相关文章:

java - 如何使用Java从JTable中的MySQL检索blob类型的图像?

javascript - CommonJS 中的 'promise' 抽象有什么好处?

javascript - 使用 fetch 时将 javascript 对象过滤到数组中

ruby-on-rails - Rails 中的参照完整性

mysql - 如何在删除其中一个表的记录时保持两个表的数据一致?

sql - 如何检查外键是否存在?

mysql - 在mysql数据库中查找最长的连续系列

mysql - 在mysql中选择字符串的一部分

php - 如何将多个上传的文件插入数据库

javascript - Q promise : are callbacks invoked in the same order as registered?