亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

Gorm 更新并在單個操作中獲取更新的行?

Gorm 更新并在單個操作中獲取更新的行?

Go
繁星淼淼 2023-07-17 17:10:58
有沒有辦法通過單個操作來獲取已使用 Gorm 中的更新命令更新的行。
查看完整描述

3 回答

?
慕田峪7331174

TA貢獻1828條經驗 獲得超13個贊

我知道這已經有一百萬年的歷史了,但為了完成,這里采用 Gorm 的方法 -子句。

????result?:=?r.Gdb.Model(&User{}).Clauses(clause.Returning{}).Where("id?=??",?"000-000-000").Updates(content)
查看完整回答
反對 回復 2023-07-17
?
慕標5832272

TA貢獻1966條經驗 獲得超4個贊

它并不漂亮,但由于您使用的是 postgres,您可以執行以下操作:


realDB := db.DB()

rows, err := realDB.Query("UPDATE some_table SET name = 'a' WHERE name = 'b' RETUNING id, name") 

//you could probably do db.Raw but I'm not sure

if err != nil {

    log.Fatal(err)

}

defer rows.Close()

for rows.Next() {

    var id int

    var name string

    err := rows.Scan(&id, &name)

    if err != nil {

        log.Fatal(err)

    }

    log.Println(id, name)

}


查看完整回答
反對 回復 2023-07-17
?
白衣非少年

TA貢獻1155條經驗 獲得超0個贊

如果您知道要更新的行數相對較?。?lt;1000),那么這是一個不錯的解決方案


var ids []int

var results []YourModel


// Get the list of rows that will be affected

db.Where("YOUR CONDITION HERE").Table("your_table").Select("id").Find(&ids)

query := db.Where("id IN (?)", ids)


// Do the update

query.Model(&YourModel{}).Updates(YourModel{field: "value"})


// Get the updated rows

query.Find(&results)

這對于競爭條件是安全的,因為它使用 ID 列表來執行更新而不是重復子句WHERE。正如您可以想象的那樣,當您開始談論數千行時,這變得不太實用。


查看完整回答
反對 回復 2023-07-17
  • 3 回答
  • 0 關注
  • 312 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號