既出だったのですが、情報が古かったので記事にしました。
ハマりポイント
構造体で更新する場合、以下のフィールドが更新されない。
- 文字列:""
- 数値:0
- ブール値:false
■更新されない例
以下は「Name, Age, Active」全て更新されない。
db.Model(&user).Updates(User{Name: "", Age: 0, Active: false})
どうすればいいか
2パターンあるようです。
-
mapを使用して更新する:map[string]interface{}{"name": "hello", "age": 18, "active": false}
// Select with Map db.Model(&user).Updates(map[string]interface{}{"name": "", "age": 0, "active": false})
-
Select を使用して更新する:Select("Name", "Age", "Active")
// Select with Struct (select zero value fields) db.Model(&user).Select("Name", "Age", "Active").Updates(User{Name: "", Age: 0, Active: false})
LINK
NOTE When update with struct, GORM will only update non-zero fields,
you might want to use map to update attributes or use Select to specify fields to update