SequelizeでJSONフィールドをupdateする場合はsetメソッドを使う

nodejsのSequelizeで、MySQLのJSONフィールドをupdateしようとしてドハマリしたのでメモ。

DataTypes.JSON なフィールドは、create時はそのフィールドにobjectを入れるだけで保存できるが、update時はsetメソッドを通してsaveしないと更新できない。

これは更新できない

const hoge = await models.Hoge.create({
  jsonField: {
    foo: 123
  }
})
hoge.jsonField.bar = 456;
await hoge.save(); // jsonField.barは保存されない

これは更新できる

 const hoge = await models.Hoge.create({
  jsonField: {
    foo: 123
  }
})
hoge.set('jsonField.bar', 456);
await hoge.save(); // jsonField.barは保存される

めちゃくちゃハマった。忘れそう。

コメント / トラックバック

コメントは受け付けていません。