【備忘録】sequelize saveで返り値をとる

プログラミング

※プロモーションページが含まれる場合があります

今回はsequelizeでsaveの返り値をとる話。

経緯

現在sequelizeを使っていてデータを更新するAPIを作っていたが「データの反映が遅い」という指摘があった。

そのコードを見ると

userGold = user.findOne({ where: id:1 });
User.update(
  { gold: userGold + 1 },
  { where: { id: 1 } }
)

みたいなコードだった。(userテーブルが持っているgoldをこのリクエストが流れる度に+1されるみないなやつ)

なにがダメなん?

もともとデータベースにuserのgoldが5というデータが入っているとして、このリクエストを送ると

レスポンスで返ってくるuserのgoldは5なのだ。だけどデータベースを更新すると6になっている。

そしてもう一回リクエストを送るとレスポンスは6が返ってきて、データベースは7になっている。

なんだかワンクッション遅れている感じ

やりたいこと

元々データベースにuserのgoldが5というものがあれば、リクエストを送るとレスポンスはuserのgoldは6が返ってきてほしい。

解決策(saveを使う)

こんな感じに書き換えたら理想の動作が実現しました。

  const user = await User.findOne({ where: id: 1}).then((user) => {
    user.gold = user.gold + 1;
    user.save();
    return user;
  });

一応解説

const (定数名)= await (テーブル名).findOne({ where:(探したいレコードの条件)).then((user) => {
//ブロックにそれぞれ代入するような感じにして最後にsave()をする。
んで、それをリターンして定数名をそれにする。 
 
    user.gold = user.gold + 1; 
    user.save(); 
    return 定数がこの値になる; 
  });

参考サイト:https://blog.capilano-fw.com/?p=5582#update

コメント

タイトルとURLをコピーしました