2016-07-22 8 views
13

Ich benutze Sequelize mit MySQL. wenn ich zum Beispiel so tun:Sequelize - Datensatz aktualisieren und Ergebnis zurückgeben

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

Ich bin nicht Informationen immer wieder, wenn das Modell Mensch erfolgreich aktualisiert wurde oder nicht. Variables Ergebnis ist nur ein Array mit einem Element, 0 = 1

Wie kann ich sicher wissen, dass der Datensatz aktualisiert wurde oder nicht.

Antwort

4

Die Update-Funktion von sequelize gibt eine Anzahl betroffener Zeilen zurück (erster Parameter des Ergebnis-Arrays).

sollten Sie finden Anruf zu bekommen Zeile aktualisiert

models.People.update({OwnerId: peopleInfo.newuser}, 
    {where: {id: peopleInfo.scenario.id}}) 
    .then(function (result) { 
     models.People.findById(peopleInfo.scenario.id) 
     .then(function(user){ 
     response(user).code(200); 
     }).catch(function (err) { 
     request.server.log(['error'], err.stack); 
     ).code(200); 
     }); 
    }).catch(function (err) { 
    request.server.log(['error'], err.stack); 
    ).code(200); 
}); 
+1

So scheint es die einzige Möglichkeit ist, Anruf sofort nach dem Update aufrufen? –

+0

sowieso sollten Sie die Suchfunktion verwenden. –

+2

können Sie 'find' Funktion zuerst aufrufen, dann aktualisieren Sie mit diesem Objekt ohne Verwendung von' wo' –

28

Hier ist, was ich denke, Sie suchen.

db.connections.update({ 
    user: data.username, 
    chatroomID: data.chatroomID 
}, { 
    where: { socketID: socket.id }, 
    returning: true, 
    plain: true 
}) 
.then(function (result) { 
    console.log(result); 
    // result = [x] or [x, y] 
    // [x] if you're not using Postgres 
    // [x, y] if you are using Postgres 
}); 

Von Sequelize docs: Das Versprechen gibt ein Array mit einem oder zwei Elementen. Das erste Element x ist immer die Anzahl der betroffenen Zeilen, während das zweite Element y ist die tatsächlichen betroffenen Zeilen (nur in Postgres unterstützt mit options.returning wahr.)

Angenommen, Sie Postgres verwenden, können Sie das aktualisierte Objekt zugreifen mit result[1].dataValues.

Sie müssen die Option returning: true festlegen, um Sequelize anzuweisen, das Objekt zurückzugeben. Und plain: true ist nur das Objekt selbst und nicht die anderen unordentlichen Metadaten, die nicht nützlich sein könnten.

+0

Ich benutze MySQL. Ich werde es mit testen. Danke für die Antwort –

+0

@Wexoni ist es Arbeit mit MySQL? gib mir Feedback –

+2

Ich war nicht in der Lage, es mit MySql arbeiten zu lassen. Ich denke, das ist nur Postgresql-Funktion :( –

Verwandte Themen