GORMでハマらないために【UPDATE編】
GORMを利用していて、UPDATEにハマったので備忘録とする。
取り扱うもの
GORMについて
UPDATE
GORMでは、updateクエリを流したいとき、大きくSaveとUpdateに分類できる。Updateを利用したところ、以下の問題があった。また、Saveにも注意点がある。
【Updateメソッド】デフォルト値でUpdateできない
例えば、int=0でUpdateしようとしても、アップデートされない。
解決策1
変更したいデータをmap[string]interface{}
へBindしてからUpdateメソッドを使う。
// Bind dataMap := map[string]interface{}{ "ID": data.ID, "Pair": data.Pair, "Side": data.Side, } r.db.Model(&orderPosition).Where(Test{ID: targetID}).UpdateColumns(dataMap)
解決策2
メンバーをポインタ渡しにすれば、0値アップデートできるようだけど、データベースへ保存するmodelsをこの形式へ変更するのは、個人的に抵抗ある。
type test struct { ID *string Pair string Side string }
【Saveメソッド】該当IDなしのとき、新規データでCreateされてしまう
アップデートのつもりでSaveを利用したら、Createされてる・・・
解決策1
元も子もないけど、可能な限りUpdateメソッドを使う。
解決策2
該当IDのレコードが存在することを確認してから、Saveメソッドを使う。ひと手間かかる・・・