PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Sequelize upsert() ne met jamais à jour et insère uniquement

Dans votre exemple upsert(), vous ne fournissez pas l'id de l'entrée dans la méthode upsert. Cela signifie que sequelize ne peut pas correspondre à l'id à une ligne (parce que l'id n'est pas défini) et insère donc une nouvelle ligne.

Même si vous utilisez une clé primaire différente, il doit toujours s'agir d'une propriété pour qu'elle corresponde, car sequelize utilise la clé primaire pour rechercher une ligne existante.

createOrUpdateTransaction: {
    type: Transaction,
    args: {
        // Omitted code...
    },
    resolve: (root, args) => {
        return db.models.transaction.upsert({
            // The id property must be defined in the args object for 
            // it to match to an existing row. If args.id is undefined 
            // it will insert a new row.
            id: args.id, 
            time: new Date().toString(),
            payerAccountNumber: args.payerAccountNumber,
            recipientAccountNumber: args.recipientAccountNumber,
            amount: args.amount,
            currency: args.currency,
            paymentMethod: args.paymentMethod,
            cardNumber: args.cardNumber,
            cardName: args.cardName,
            cardNetwork: args.cardNetwork,
            // Omitted fields ...
        })
    }
}