【Go】db(gorm)
Gorm update の挙動について
❗️ハマりポイント
Updates supports updating with struct or map[string]interface{}, when updating with struct it will only update non-zero fields by default
NOTE When updating 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
ゼロ値での更新がされないため、対策が必要そう。
ゼロ値での更新をしたい場合(int:0 や bool:false は必要な結構ケースありそう)map を使うか Select updates をする必要があると記載があるが、pointer にする形でも解決はしそう
map にするとカラムの追加をする時とかに Update メソッドの追加を忘れたりしそうだから、ゼロ値で更新したいケースは pointer にする、の方が早そう
tx の管理について
Gorm Create
❗️ハマりポイント
Create では model に ID を詰めて返してくれるが、他のフィールドはその限りではない。作成後に作成された model を返したい場合は再度 Find する必要がある。
// returns inserted data's primary key
user := User{Name: "Jinzhu", Age: 18, Birthday: time.Now()}
result := db.Create(&user) // pass pointer of data to Create
user.ID // returns inserted data's primary key
result.Error // returns error
result.RowsAffected // returns inserted records count
Gorm Where
❗️ハマりポイント
Where 句は Find や Create より先に書いていないと無視されるので注意