用gorm exec执行insert语句,如何获取插入id

用gorm exec执行insert语句,如何获取插入id

func CreateVoicePackage(db *gorm.DB, obj *VoicePackage, isDefault bool) error {
current := time.Now()

id := "FROM (SELECT id FROM voice_package) temp"
if isDefault {
    id = "SELECT IFNULL(MAX(id),1)+1 " + id + " WHERE id <= " + strconv.Itoa(DefaultMaxNum)
} else {
    id = "SELECT IFNULL(MAX(id)," + strconv.Itoa(DefaultMaxNum+1) + ")+1 " + id + " WHERE id >" + strconv.Itoa(DefaultMaxNum)
}

return db.Exec("INSERT INTO voice_package "+
    "(id,name,product_codes,preview_url,url,md5,size,version,create_time,update_time) "+
    "VALUES ( ("+id+"),?,?,?,?,?,?,?,?,?)",
    obj.Name, obj.ProductCodes, obj.PreviewUrl, obj.Url, obj.MD5, obj.Size, obj.Version, &current, &current).Error
}
已邀请:

happyEgg - 高级挖坑工程兽

赞同来自:

你都用这个了,我有什么办法。Save()或者Create()了解一下?

fwhezfwhez

赞同来自:

orm方式,用create可以拿到, sql方式,试试用db.Raw("insert into x() values() returning id").Scan(), 或者拆分成Exec("insert ...")Raw("select...").Scan(), 如果没有占位符需求,即不需要预编译,可以写成 db.Raw("insert .... ; select ...").Scan().

sunwei - 6

赞同来自:

建议orm create

要回复问题请先登录注册