0
1

GORMでUpdateするメソッドについて表に整理してみた

Last updated at Posted at 2024-07-23

gormのUpdateメソッドについてそれぞれ違いがあるので表にまとめてみた。

GORMの更新メソッドの違い

メソッド 更新対象 UpdatedAtの自動更新 ゼロ値の扱い(数値型の0、空文字、boolのfalse など) 主な用途
Save 全フィールド する 更新される 全フィールドの更新、新規レコードの保存
Update 単一フィールド する 更新される 特定のフィールドの更新
Updates 複数フィールド する 構造体: 無視される
マップ: 更新される
複数のフィールドの更新
UpdateColumns 複数のフィールドの更新 しない 無視される 複数のフィールドの更新

ゼロ値の更新の部分はゼロ値を正しく理解してないとハマる。例えば、ポインタ型の場合は、nilがゼロ値になるということを意識しておく必要がある。
例えば

sample
abc struct {
isTest bool 
isProd *bool
}

db.Model(&sample).UpdateColumns(User{isTest: false, isProd: false})

// 生成されるSQLのset句にゼロ値が除外される。ポインタ型はnilがゼロ値でこの場合は除外されない。
// update sample set isProd = false

関連ドキュメント
https://gorm.io/docs/update.html

ゼロ値について
https://qiita.com/tenntenn/items/c55095585af64ca28ab5

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1