【发布时间】:2020-05-19 18:10:39
【问题描述】:
在为 gorm 包创建记录时,我对默认行为有点困惑。
city := models.City
if err := databases.DBGORM.Set("gorm:insert_option", "RETURNING *").Create(&city).Error; err != nil {
fmt.Println(err.Error())
}
在日志中我看到这样的 SQL 查询:
INSERT INTO "my_scheme"."city" ("created_at","updated_at","deleted_at","name","country") VALUES ('2020-05-19 23:45:18','2020-05-19 23:45:18',NULL,'New York','USA') RETURNING * RETURNING "my_scheme"."city"."id"
从查询中可以看出,我有一个不正确的双 RETURNING 子句并引发错误。
在 SQL 查询末尾添加 id 似乎是 Create 方法的默认行为。我该如何改变这种行为?
models.go:
package models
import (
"my_app/proto"
"time"
)
type City struct {
Id uint64
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt *time.Time
proto.City
}
func (City) TableName() string {
return "my_scheme.city"
}
【问题讨论】:
-
我无法更改
Create函数的默认行为,但是您通过地址传递给 gorm 函数的结构将使用新 ID 和 created_at,updated_at 字段进行更新。您还需要插入行中的其他内容吗?