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)
_
あなたはあなたの構造体にgormタイプを書くべきです、このようなもの:gorm:"type:boolean; column:column_name"
そして確かにそれが機能するでしょう!
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構造の代わりにマップを使用してください