以下是我的模特:
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的值
答案 0 :(得分:0)
您可以执行以下操作使GORM自动将其拾取(为该字段添加RETURNING
子句),方法是在该字段上添加default
标签。这有点骇人听闻,但是可以。
LastSentMessageSeq int64 `gorm:"default:0"`