On updates
gorm doesnt update boolean type to false
. By default it updates to true
, but when i try to update to false
not changes. I dont see any errors also. What can be the issue ?
type Attendee struct {
ID uint `gorm:"primary_key" gorm:"AUTO_INCREMENT" json:"id,omitempty" mapstructure:"id" csv:"ID"`
Email string `json:"email,omitempty" mapstructure:"email" csv:"Email,required"`
ShowDirectory bool `json:"show_directory,omitempty" gorm:"default:true" mapstructure:"show_directory" csv:"-"`
}
var attendee Attendee
// JSON.unmarshal lines here for the &attendee
if err := service.DB.Model(&attendee).Updates(Attendee{
Email: attendee.Email,
ShowDirectory: false
}).Error; err != nil {
return Attendee{}, err
}
Alternate Solution:
This works, but I am updating multiple attributies. So, I cant use this.
att := Attendee{ID: 1}
service.DB.Model(&att).Update("ShowDirectory", false)
As @mkopriva mentioned, by GORM Documentation
// WARNING when update with struct, GORM will only update those fields that with non blank value
// For below Update, nothing will be updated as "", 0,
false are blank values of their types
db.Model(&user).Updates(User{Name: "", Age: 0, Actived: false})
Solved:
if err := service.DB.Model(&attendee).Updates(map[string]interface{}{
"Email": attendee.Email,
"ShowDirectory": false
}).Error; err != nil {
return Attendee{}, err
}
You should write gorm type in your struct, something like this: gorm:"type:boolean; column:column_name"
and for sure it will work!