PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Sequelize upsert() aktualisiert niemals und fügt nur ein

In Ihrem upsert()-Beispiel geben Sie die id nicht an des Einstiegs in das Upsert-Verfahren. Das bedeutet, dass sequelize nicht mit der id übereinstimmen kann zu einer Zeile (weil die id ist undefiniert) und fügt daher eine neue Zeile ein.

Selbst wenn Sie einen anderen Primärschlüssel verwenden, muss es immer eine passende Eigenschaft sein, da sequelize den Primärschlüssel verwendet, um nach einer vorhandenen Zeile zu suchen.

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