как сохранить сохраненные элементы только после обновления всех моделей - PullRequest
0 голосов
/ 28 апреля 2020

В моих моделях у меня отношения «один ко многим» 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 но модели сохраняются и обновляются, так как они sh в массив

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);
};
...