第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

GORM 不會將布爾字段更新為 false

GORM 不會將布爾字段更新為 false

Go
富國滬深 2023-06-26 16:39:35
在updatesgorm 上,不會將布爾類型更新為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 &attendeeif 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)
查看完整描述

5 回答

?
飲歌長嘯

TA貢獻1951條經(jīng)驗 獲得超3個贊

// Update attributes with `struct`, will only update non-zero fields

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;


// Update attributes with `map`

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;

注意當使用struct更新時,GORM只會更新非零字段,您可能想使用map更新屬性或使用Select指定要更新的字段


解決了:


if err := service.DB.Model(&attendee).Updates(map[string]interface{}{

? ? "Email":? ? ? ? ? attendee.Email,

? ? "ShowDirectory": false

}).Error; err != nil {

? ? return Attendee{}, err

}


查看完整回答
反對 回復 2023-06-26
?
牧羊人nacy

TA貢獻1862條經(jīng)驗 獲得超7個贊

另一種方便的方法是將該字段設(shè)置為指針。

注意所有具有零值的字段,如 0、''、false 或其他零值,都不會保存到數(shù)據(jù)庫中,但會使用其默認值。如果您想避免這種情況,請考慮使用指針類型或掃描儀/估價器

在您的情況下,模型將如下所示:

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:"-"`

}


查看完整回答
反對 回復 2023-06-26
?
德瑪西亞99

TA貢獻1770條經(jīng)驗 獲得超3個贊

正如文檔中提到的,要設(shè)置虛假值,您需要使用map或選擇所需的列。


當使用struct更新時,GORM只會更新非零字段,您可能需要使用map來更新屬性或使用Select來指定要更新的字段


// Select with Struct (select zero value fields)

db.Model(&user).Select("Name", "Age").Updates(User{Name: "new_name", Age: 0})

// UPDATE users SET name='new_name', age=0 WHERE id=111;

或者您可以選擇所有列:


// Select all fields (select all fields include zero value fields)

db.Model(&user).Select("*").Update(User{Name: "jinzhu", Role: "admin", Age: 0})


查看完整回答
反對 回復 2023-06-26
?
撒科打諢

TA貢獻1934條經(jīng)驗 獲得超2個贊

請不要使用 go struct 來更新非零字段,例如 boolean:false


下面的代碼不會Active: false在你的數(shù)據(jù)庫中更新,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;

使用 Map 而不是 go struct


查看完整回答
反對 回復 2023-06-26
?
鴻蒙傳說

TA貢獻1865條經(jīng)驗 獲得超7個贊

您應該在結(jié)構(gòu)中編寫 gorm 類型,如下所示: gorm:"type:boolean; column:column_name" 并且它肯定會起作用!



查看完整回答
反對 回復 2023-06-26
  • 5 回答
  • 0 關(guān)注
  • 778 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號