GORM не обновляет логическое поле на false - PullRequest
2 голосов
/ 18 июня 2019

On updates gorm не обновляет логический тип до 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)

1 Ответ

1 голос
/ 18 июня 2019

Как упомянуто @mkopriva, GORM Документация

// ПРЕДУПРЕЖДЕНИЕ при обновлении с помощью структуры, GORM будет обновлять только те поля, которые имеют непустое значение

// Для обновления ниже ничего не будет обновлено как "", 0, false are blank values of their types

db.Model (& user) .Updates (Пользователь {Имя: "", Возраст: 0, Actived: false})

Решено:

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