首页 > 解决方案 > 只有在所有模型更新后才续集保存项目

问题描述

在我的模型中,我有一对多的关系 Team.hasMany(Player); Player.belongsTo(Team);

const MyTeam = await Team.findOne({
  where: {
    name: "chikago"
  },
  include: Playes
});

结果像这样的json

MyTeam": {
    "id" : 5,
    "name" : "chikago",
    "title"  : "lets'go Chikago!!!"

    "Players": [
        {
            "id": 1,
            "name": "bob"
            "years": 18
        },
        {
            "id": 2,
            "name": "tom"
            "years": 20
        },
    ]
};

所以在 MyTeam 中,我得到了与团队和球员相关的结果。现在我想在 MyTeam 实体和玩家中编辑一些值,并创建新玩家,然后保存所有这些并try...catch处理错误;

例如:

MyTeam.title = "here are we go";
try {
    await MyTeam.save();
} catch (error) {
    console.log(error);
}
let newPlayer = new Player({...});
try {
    await newPlayer.save();
} catch (error) {
    console.log(error);
};

// here many other code ...


try {
    MyTeam.Players.map(async player => {
        player.years = player.years + 1;
        await player.save();
    });
} catch (error) {
    console.log(error);
}

但是如果我需要保存我所有的编辑,有一种方法

let entityManager = new Sequeilize('entityManager');
MyTeam.title = "here are we go";
entityManager.add(MyTeam);

let newPlayer = new Player({...});
entityManager.add(newPlayer);

MyTeam.Players.map(player => {
    player.years = player.years + 1;
    entityManager.add(player);
});

try {
    await entityManager.save();
} catch (error) {
    console.log(error);
};

我试图做这样的事情,如https://github.com/sequelize/sequelize/issues/5471#issuecomment-216373780中所述, 但模型保存并在它们推送到数组时更新

let savingEntities = [];
MyTeam.title = "here are we go";
savingEntities.push(MyTeam);

let newPlayer = new Player({...});
savingEntities.push(newPlayer);

MyTeam.Players.map(player => {
    player.years = player.years + 1;
    savingEntities.push(player);
});

try {
    await Promise.all(savingEntities);
} catch (error) {
    console.log(error);
};

标签: sequelize.jssequelize-typescriptsequelize-hooks

解决方案


推荐阅读