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

时间:2019-04-01 07:10:05

标签: postgresql go go-gorm

以下是我的模特:

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的值

1 个答案:

答案 0 :(得分:0)

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

    LastSentMessageSeq int64 `gorm:"default:0"`