2016-11-03 5 views
1

Я использую Sequelize как ORM вместе с express.js Ниже представлена ​​моя минималистская структура таблицы.Обновить только одну строку в sequelize

Id status   phone 

1  0    09620701828 
2  0    09620701828 

Теперь, когда запрос апи это сделать на конечной точке, то я должен обновить статус для последнего идентификатора, принадлежащего к конкретному телефону, что я получаю от запроса. Сырой запрос MySql, для которого будет UPDATE table SET status=1 where phone='09620701828' ORDER BY id DESC LIMIT 1;

Как я могу добиться того же, используя метод обновления Sequelize. Ниже то, что я попытался

models.customerLeadFeedback.update(
    {status: 1}, 
    { 
     where: {phone : '09620701828'}, 
     order: [['id', 'DESC']], 
     limit : 1 

    }).then(function() { 
     res.sendStatus(200); 
    })` 

Но заказ по п не работает выше и обновления статуса для идентификатора 1. Может ли кто-нибудь помочь мне с этим без использования необработанного запроса в sequelize.

ответ

3

Казалось бы, что Model#update функция Sequelize не поддерживает порядок - см документацию на http://sequelize.readthedocs.io/en/v3/api/model/#updatevalues-options-promisearrayaffectedcount-affectedrows

Если вы действительно хотите предназначаться строку заказав, вы могли бы сначала выбрать строку, а затем обновить его:

models.customerLeadFeedback.findOne(
    {status: 1}, 
    { 
    where: {phone : '09620701828'}, 
    order: [['id', 'DESC']] 
}).then(function (record) { 
    return record.update({status: 1}); 
}).then(function (record) { 
    res.sendStatus(200); 
}); 

Это менее эффективно, используя два запроса вместо одного, но в настоящее время выглядит как ваш единственный вариант, если вы не хотите использовать необработанные запросы.

+0

Я думаю, что в первом запросе вы забыли изменить обновление на findOne или findAll rest, это сработает, и я думаю, что использование необработанного запроса будет более эффективным тогда. –

+0

Упс! Исправлено. Возможно, вы захотите поднять проблему/PR на sequelize github - из моего свободного знания их кода это должно быть тривиальное дополнение –