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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

調(diào)用 Updates() 時(shí) GORM 更新空字段?

調(diào)用 Updates() 時(shí) GORM 更新空字段?

Go
三國(guó)紛爭(zhēng) 2022-06-27 16:41:42
根據(jù)GORM 的文檔:Updates 支持使用 struct 或 map[string]interface{} 進(jìn)行更新,使用 struct 更新時(shí)默認(rèn)只會(huì)更新非零字段我的數(shù)據(jù)庫(kù)中已經(jīng)有一個(gè)Service帶有 ID 的條目,abc123. 我正在嘗試獲取如下所示的對(duì)象:Service{  ID: "abc123",  Name: "new service name",  CreatedAt: nil,}并用它來更新我現(xiàn)有的記錄。但是當(dāng)我打電話時(shí):tx.Model(&service).Updates(service)數(shù)據(jù)庫(kù)中的CreatedAt值被覆蓋nil。如何在不覆蓋值的情況下更新我的數(shù)據(jù)庫(kù)記錄CreatedAt?更新:下面是我的Service結(jié)構(gòu)type Service struct {  ID        string  `gorm:"not null;type:char(32);primary_key;column:id"`  Name      string  `json:"name" gorm:"size:50;not null;"`  CreatedAt *time.Time  UpdatedAt time.Time  DeletedAt *time.Time `gorm:"index"`}我為我的Service結(jié)構(gòu)嘗試了兩種不同的變體。另一個(gè)是CreatedAt類型time.Time而不是*time.Time. *time.Time它將用空值覆蓋我的數(shù)據(jù)庫(kù)中的值。time.Time它嘗試用未初始化的時(shí)間值覆蓋數(shù)據(jù)庫(kù)中的值并引發(fā)錯(cuò)誤:Error 1292: Incorrect datetime value: '0000-00-00' for column 'created_at' at row 1
查看完整描述

3 回答

?
元芳怎么了

TA貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超7個(gè)贊

默認(rèn)情況下,gorm 不會(huì)更新默認(rèn)值(零)或 nil 值。如果您想控制它,請(qǐng)使用我在下面描述的東西。您可以使用 sql 包提供的可空類型或創(chuàng)建自己的類型。


type Model struct {

    Amount *sql.NullFloat64

}


// amount will not be updated

gorm.Updates(Model{Amount: nil})


// amount will be updated as a null

gorm.Updates(Model{Amount: &sql.NullFloat64{}})


// amount will be updated as a 10.50

gorm.Updates(Model{Amount: &sql.NullFloat64{Float64: 10.50, Valid: true}})


查看完整回答
1 反對(duì) 回復(fù) 2022-06-27
?
RISEBY

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超5個(gè)贊

time.Time結(jié)構(gòu)內(nèi)字段類型的零值或默認(rèn)值是time.Time{}. 使用 時(shí)Updates,要么不填充CreatedAt字段,要么為其賦值time.Time{}。


CreatedAt在下面的示例中,在兩種情況下都為字段打印出默認(rèn)值或零值。


package main


import (

    "fmt"

    "time"

)


type T struct {

   CreatedAt time.Time

   C int

   S string

}


func main() {

    fmt.Println(T{C: 1, S: "one"})

    fmt.Println(T{C: 2, S: "two", CreatedAt: time.Time{}})

}


// {0001-01-01 00:00:00 +0000 UTC 1 one}

// {0001-01-01 00:00:00 +0000 UTC 2 two} 

編輯:另外,如果字段是類型, 我不確定如何CreatedAt: nil,編譯,而不是.CreatedAttime.Time*time.Time


由于您已將Service結(jié)構(gòu)和CreatedAt字段類型更新為*time.Time,因此以下應(yīng)該可以工作:


tx.Model(&service).Updates(Service{Name: service.Name}) // add all fields that you want to be updated.


// resulting query

// UPDATE services SET name = 'new service name' WHERE id = 'abc123';

官方 GORM 示例在這里


此外,您可以像這樣省略該created_at字段:


tx.Model(&service).Omit("created_at").Updates(service)


查看完整回答
反對(duì) 回復(fù) 2022-06-27
?
呼啦一陣風(fēng)

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超6個(gè)贊

使用地圖 https://gorm.io/docs/update.html#Updates-multiple-columns

tx.Model(&service).Updates(map[string]interface{}{"ID": "abc123", "Name": "new service name", "CreatedAt": nil})



查看完整回答
反對(duì) 回復(fù) 2022-06-27
  • 3 回答
  • 0 關(guān)注
  • 1017 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

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