在updates
上,gorm不会将 bool 类型更新为false
。默认情况下,它更新为true
,但是当我尝试更新为false
时不会更改。我也没有看到任何错误。可能是什么问题?
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
}
替代解决方案:
这可行,但是我要更新多个属性。所以,我不能使用它。
att := Attendee{ID: 1}
service.DB.Model(&att).Update("ShowDirectory", false)
最佳答案
正如@mkopriva所提及,GORM Documentation
解决了:
if err := service.DB.Model(&attendee).Updates(map[string]interface{}{
"Email": attendee.Email,
"ShowDirectory": false
}).Error; err != nil {
return Attendee{}, err
}