web-dev-qa-db-ja.com

GORMはBooleanフィールドをFalseに更新しません

updates gormは、Update Boolean Typeを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)
 _
6
7urkm3n

あなたはあなたの構造体にgormタイプを書くべきです、このようなもの:gorm:"type:boolean; column:column_name"そして確かにそれが機能するでしょう!

0
DragoRoff

Boolean:falseなどのゼロ以外のフィールドを更新するためのGO構造体を使用しないでください

下のコードは、データベース内のActive: falseを更新しません、そしてgormは単に無視するだけです

db.Model(&user).Updates(User{Name: "hello", Age: 18, Active: false})
// UPDATE users SET name='hello', age=18, updated_at = '2013-11-17 21:34:10' WHERE id = 111;

以下のコードはActive: falseを更新します

db.Model(&user).Updates(map[string]interface{}{"name": "hello", "age": 18, "actived": false})
// UPDATE users SET name='hello', age=18, actived=false, updated_at='2013-11-17 21:34:10' WHERE id=111;

GO構造の代わりにマップを使用してください

0