Sequelize upsert() nie updates und fügt nur

So, ich bin versucht, die model.upsert() von sequelize und alle, die ich empfangen wird, fügt , egal was ich ändere in der Abfrage.

Habe ich eine Transaktion Modell, hat einige Felder, die standardmäßig generierte id.

Lesen der sequelize ist upsert Unterlagen, die ich bemerkt:

Einem update wird ausgeführt, wenn eine Zeile mit dem gelieferten Werte, die entweder auf den Primärschlüssel oder einen eindeutigen Schlüssel zu finden ist. Beachten Sie, dass der unique-index definiert werden muss, die in Ihrem sequelize Modell und nicht nur in der Tabelle.

So, ich war zu raten, ich habe zu definieren, die id der Transaktion in der Modell definition, und so habe ich mit kein Glück, wie es noch schafft nur neue Einträge..

TransactionModel = {
    id: {
        type: Sequelize.INTEGER,
        allowNull: false,
        primaryKey: true,
        autoIncrement: true
    },
    {.......}
}

Was mache ich falsch, hab ich was verpasst?

Jede Erklärung und Lösung wird sehr geschätzt, danke im Voraus!

EDIT:

Dies ist die upsert-code:

createOrUpdateTransaction: {
            type: Transaction,
            args: {
                payerAccountNumber: {type: new GraphQLNonNull(GraphQLInt)},
                recipientAccountNumber: {type: new GraphQLNonNull(GraphQLInt)},
                amount: {type: new GraphQLNonNull(GraphQLFloat)},
                currency: {type: new GraphQLNonNull(GraphQLString)},
                paymentMethod: {type: new GraphQLNonNull(GraphQLString)},
                cardNumber: {type: GraphQLFloat},
                cardName: {type: GraphQLString},
                cardNetwork: {type: GraphQLString},
                cashMachineId: {type: GraphQLFloat},
                receiptNumber: {type: new GraphQLNonNull(GraphQLFloat)},
                invoiceNumber: {type: new GraphQLNonNull(GraphQLFloat)},
                receiptCopy: {type: new GraphQLNonNull(GraphQLString)},
                description: {type: GraphQLString},
                bankDescription: {type: GraphQLString},
                bankReference: {type: new GraphQLNonNull(GraphQLString)},
                bankSubCurrencyAccount: {type: new GraphQLNonNull(GraphQLString)},
                tags: {type: new GraphQLList(GraphQLString)},
                notes: {type: GraphQLString}
            },
            resolve: (root, args) => {
                return db.models.transaction.upsert({
                    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,
                    cashMachineId: args.cashMachineId,
                    receiptNumber: args.receiptNumber,
                    invoiceNumber: args.invoiceNumber,
                    receiptCopy: args.receiptCopy,
                    description: args.description,
                    bankDescription: args.bankDescription,
                    bankReference: args.bankReference,
                    bankSubCurrencyAccount: args.bankSubCurrencyAccount,
                    tags: args.tags,
                    notes: args.notes,
                    bankAccountAccountNumber: args.payerAccountNumber
                })
            }
        }

Als diese ist Teil eines Mutation im GraphQL.

Es mag auch erwähnenswert sein, dass dies addTransaction vor und alle die ich geändert habe, war db.models.transaction.upsert() aus db.models.transaction.create()

  • Da ich noch nie verwendet sequelize, meine Vermutung hier ist, dass die autoIncrement-Aspekt (oder etwas, was Sie tun), dann ist die Unordnung, die Sie irgendwie.
  • Manuelles erstellen von Transaktion in die DB zu produzieren sequenzielle id, so dass ich denke, dass ist in Ordnung. mit oder ohne diese id (also mit der default-generierte id) es werden nur Einsätze
  • Sind Sie sicher, dass die ID, die Sie verwenden, wenn upserting ist eine Zahl? Würde mich nicht Wundern, wenn es scheitert, wenn es sich um einen string.
  • Wenn ich mit der Standard-generierte ID es soll immer eine Reihe, und wenn ich meine id auf die Transaktion, können Sie sehen, ich definierte es als Sequelize.INTEGER, und verwendet autoIncreament so sein soll, automatisch
  • Ich meine, wenn Sie upserting müssen Sie die ID des Modells, die möglicherweise oder möglicherweise nicht vorhanden(wenn id undefined/null eingelegt ist, wird Sie nicht aktualisiert, aber wenn die id eine Zahl ist, und es ist gefunden in der db aktualisiert). Und ich wollte, um sicherzustellen, dass die ID, wenn Sie upserting ist eine gültige Zahl.
  • Ich Lesen Sie die Dokumentation docs.sequelizejs.com/en/latest/api/model/... und es sieht aus wie Sie verwenden upsert wie Sie möchten, verwenden create auf, übergeben Sie die Daten für den Eintrag und es wird überprüft, ob es vorhanden ist oder nicht, indem die id des Modells, kann ich das missverstehen?
  • Auch Sie müssen sicherstellen, dass Sie tatsächlich vorbei in die ID von dem model, wenn es bereits vorhanden ist, damit es gefunden wird. Was ich aber gemeint, dass, wenn Sie dies tun, müssen Sie sicherstellen, dass es den richtigen Typ. Selbst wenn die id 1 ist, müssen Sie sicherstellen, dass es eine Nummer, nicht aber zum Beispiel ein string. Wenn es ein string, es könnte nicht passen.
  • um deutlich zu machen, das ist, wie ich upsert => db.models.transaction.upsert(transaction);, wenn ich Sie richtig verstehe, sagen Sie, dass dies nicht der richtige Weg und im fehlenden Validierung der id auch wenn Sie die id generiert wird. bitte erläutern Sie, wie upsert mit einem Beispiel an, es zu schätzen wissen
  • Bitte aktualisieren Sie Ihre Frage mit einer detaillierten code-Beispiel zeigt, wie Sie tun upsert.

InformationsquelleAutor Kesem David | 2016-09-08
Schreibe einen Kommentar