73 votes

Sequelize - mise à jour de l'enregistrement, et retour du résultat

J'utilise sequelize avec MySQL. Par exemple, si je fais :

models.People.update({OwnerId: peopleInfo.newuser},
        {where: {id: peopleInfo.scenario.id}})
        .then(function (result) {
            response(result).code(200);

        }).catch(function (err) {
        request.server.log(['error'], err.stack);
       ).code(200);
    });

Je ne reçois pas d'information en retour pour savoir si le modèle de personnes a été mis à jour avec succès ou non. Le résultat de la variable est juste un tableau avec un élément, 0=1.

Comment puis-je savoir avec certitude si l'enregistrement a été mis à jour ou non ?

3voto

ns16 Points 415

Il existe un autre moyen - utiliser findByPk méthode statique et update méthode non statique ensemble. Par exemple :

let person = await models.People.findByPk(peopleInfo.scenario.id);
if (!person) {
  // Here you can handle the case when a person is not found
  // For example, I return a "Not Found" message and a 404 status code
}
person = await person.update({ OwnerId: peopleInfo.newuser });
response(person).code(200);

Notez que ce code doit se trouver à l'intérieur d'une fonction asynchrone.

1 votes

Meilleure réponse jusqu'à présent

1voto

SuperZZ Points 11

Vous pouvez d'abord récupérer le modèle à mettre à jour, puis appeler set() et save() sur celui-ci. Le retour de cet objet vous donnera le modèle mis à jour.

Bien que cette méthode ne soit pas la plus courte, je la préfère car elle permet de gérer séparément les erreurs de type "not found" et "update".

const instance = await Model.findOne({
  where: {
    'id': objectId
  }
});

if (instance && instance.dataValues) {
  instance.set('name', objectName);
  return await instance.save(); // promise rejection (primary key violation…) might be thrown here
} else {
  throw new Error(`No Model was found for the id ${objectId}`);
}

0voto

Basanta Kc Points 137

Si vous utilisez postgres et mettez à jour une ligne.

  try {
    const result = await MODELNAME.update(req.body, {
      where: { id: req.params.id },
      returning: true
    });
    if (!result) HANDLEERROR()
    const data = result[1][0].get();

    res.status(200).json({ success: true, data });
  } catch (error) {
    HANDLEERROR()
  }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X