gpt4 book ai didi

postgresql - 创建或更新未在GORM中返回更新后的值

转载 作者:行者123 更新时间:2023-12-02 11:25:30 27 4
gpt4 key购买 nike

以下是我的模型:

type Room struct {
PK string `sql:"size:255;not null;"gorm:"primary_key"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt *time.Time

LastSentMessageSeq int64
RoomID string `sql:"size:255;not null;"gorm:"unique_index:rooms_room_id_client_id"`
User User
UserID string `sql:"size:255;not null"`
Client Client
ClientID string `sql:"size:255;not null"gorm:"unique_index:rooms_room_id_client_id"`
}

我正在使用Postgres。我正在尝试进行更新或创建操作。如果存在行,则增加 LastSentMessageSeq字段,否则插入一个新的。以下是我的代码:
var room = Room{ClientID: clientID, RoomID: roomID, UserID: usedID, LastSentMessageSeq: 10}
err := ws.db.Set("gorm:insert_option", "ON CONFLICT (room_id, client_id) DO UPDATE SET last_sent_message_seq = rooms.last_sent_message_seq + 1").Create(&room).Error
log.Println(err)
log.Println(room)

但是,当我打印房间对象时,它没有 LastSentMessageSeq字段的更新值。但是我可以看到它正在执行upsert操作,即如果它不存在则创建一个新行或更新数据库中LastSentMessageSeq的值

最佳答案

您可以执行以下操作以使GORM自动将其拾取(为该字段添加RETURNING子句):在该字段上添加default标记。这有点骇人听闻,但是很有效。

    LastSentMessageSeq int64 `gorm:"default:0"`

关于postgresql - 创建或更新未在GORM中返回更新后的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55449722/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com