2016-07-22 36 views
13

Używam sequelize z MySQL. Na przykład, jeśli to zrobię:Sequelize - zaktualizuj rekord i zwróć wynik

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

Nie otrzymuję informacji, jeśli model osoby został pomyślnie zaktualizowany lub nie. Wynik zmienny to tylko tablica z jednym elementem, 0 = 1

Skąd mogę wiedzieć na pewno, że rekord został zaktualizowany, czy nie.

Odpowiedz

4

Funkcja aktualizacji sequelize zwraca liczbę dotkniętych wierszy (pierwszy parametr tablicy wyników).

należy zadzwonić, aby uzyskać zaktualizowane znaleźć wiersz

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

Więc wydaje się, że jedynym sposobem jest zadzwonić znaleźć natychmiast po aktualizacji? –

+0

mimo to powinieneś użyć funkcji find. –

+2

możesz najpierw wywołać funkcję 'find', a następnie zaktualizować ten obiekt bez użycia' where' –

28

Oto co myślę szukasz.

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

Od Sequelize docs: Obietnica zwraca tablicę z jednym lub dwoma elementami. Pierwszym elementem x zawsze jest liczba wierszy, natomiast drugi element y jest rzeczywiste wierszy (obsługiwane tylko w PostgreSQL z options.returning prawdziwe.)

Zakładając, że używasz PostgreSQL, można uzyskać dostęp do zaktualizowanego obiektu z result[1].dataValues.

Musisz ustawić opcję returning: true, aby powiedzieć Sequelize, aby zwróciła obiekt. I plain: true jest po prostu zwrócić obiekt, a nie inne niechlujne meta danych, które mogą nie być przydatne.

+0

Używam MySQL. Testuję to. Dzięki za odpowiedź –

+0

@Wexoni czy to działa przy użyciu MySQL? daj mi opinię –

+2

Nie udało mi się sprawić, żeby działała z MySql. Domyślam się, że jest to tylko funkcja Postgresql :( –