2016-11-03 10 views
1

に私は以下express.jsと一緒にORMとしてSequelizeを使用しています私の最小限のテーブル構造です。 APIリクエストは、エンドポイントにすることです今更新のみ1行sequelize

Id status   phone 

1  0    09620701828 
2  0    09620701828 

は、私がリクエストから取得しています特定の電話に属する最後のIDのステータスを更新する必要があります。以下のための生のMySQLのクエリは、私はそれを用いSequelize更新方法を実現するにはどうすればよい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); 
    })` 

を試してみましたが、しかし、ORDER BY句は、上記とid 1のステータスを更新するために働いていないものです。

答えて

3

SequelizeのModel#update機能が順序をサポートしていないように見えます - あなたは本当に注文して行をターゲットにしたい場合は、あなたがそれを更新し、最初の行をフェッチすることができ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); 
}); 

これは、2つのクエリの代わりのいずれかを使用して、あまり効率的だが、あなたは生のクエリを使用したくない場合は、現在唯一のオプションのように見えます。

+0

私は最初のクエリでfindOneまたはfindAllに更新を変更するのを忘れてしまったと思います。それは機能しますが、生のクエリを使用するとより効率的になると思います。 –

+0

おっと!これを修正しました。続編のgithubに関する問題やPRを挙げたいかもしれません - 自分のコードについての私の知識が不足していることから、それは簡単な追加でなければなりません –

関連する問題