Sequelize upsert
j'ai besoin d'obtenir l'id de l'insertion/mise à jour d'enregistrement lors de l'utilisation de .upsert()
dans sequelize.
maintenant .upsert()
retourne un booléen indiquant si la ligne a été créé ou mis à jour.
return db.VenueAddress.upsert({
addressId:address.addressId,
venueId: venue.venueId,
street: address.street,
zipCode: address.zipCode,
venueAddressDeletedAt: null
}).then(function(test){
//test returned here as true or false how can i get the inserted id here so i can insert data in other tables using this new id?
});
source d'informationauteur Hussein Al-Far
Vous devez vous connecter pour publier un commentaire.
Je voulais upsert pour retourner le créées ou mises à jour de l'objet. Il n'est pas seulement parce que PGSQL prend en charge directement, apparemment.
J'ai donc créé une implémentation naïve qui sera probablement un non-performantes moyen, et, éventuellement, avec toutes sortes de conditions de course, faire:
D'utilisation lorsque vous essayez de créer/mettre à jour un déménagement dans un jeu (exemple artificiel alerte!):
C'est ce qui a fonctionné pour moi:
Il va vérifier db en se basant sur votre clé primaire. Si il trouve ensuite, il mettra à jour les données, sinon il va créer une nouvelle ligne/insérer une nouvelle ligne.
je sais que c'est un vieux post, mais dans le cas où cela peut aider n'importe qui
janmeier dit:
C'est uniquement pris en charge par postgres, de manière à conserver l'API cohérente à travers les dialectes, ce n'est pas possible.
voir : https://github.com/sequelize/sequelize/issues/3354
Je ne pense pas que le retour de la upserted record était disponible au moment de l'OP posé cette question, mais il a depuis été mis en œuvre avec ce PR. Comme de Sequelize v4.32.1vous pouvez passer un booléen "retourne" la requête en tant que paramètre à choisir entre retourner un tableau avec l'enregistrement et l'opérateur booléen " ou juste un booléen indiquant si oui ou non un nouveau record a été créé.
Vous n'avez encore besoin de fournir l'id de l'enregistrement que vous souhaitez upsert ou un nouveau dossier sera créé.
Par exemple:
Qui je me suis résolu comme suit: