代码之家  ›  专栏  ›  技术社区  ›  7urkm3n Neeraj Kumar

GORM不将布尔字段更新为false

  •  1
  • 7urkm3n Neeraj Kumar  · 技术社区  · 7 年前

    updates gorm不将布尔类型更新为 false . 默认情况下更新为 true ,但当我尝试更新到

    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)
    
    0 回复  |  直到 6 年前
        1
  •  2
  •   7urkm3n Neeraj Kumar    7 年前

    正如GORM提到的@mkopriva Documentation

    //警告使用struct更新时,GORM将只更新具有非空值的字段

    false are blank values of their types

    db.Model(&user).Updates(用户{Name:“,年龄:0,Actived:false})

    解决了的:

    if err := service.DB.Model(&attendee).Updates(map[string]interface{}{
        "Email":          attendee.Email,
        "ShowDirectory": false
    }).Error; err != nil {
        return Attendee{}, err
    }
    
        2
  •  0
  •   DragoRoff    6 年前

    您应该在结构中编写gorm类型,如下所示: gorm:"type:boolean; column:column_name" 一定会成功的!

    推荐文章