如何解决gorm exec 使用原始 sql 从插入事务返回 ID
我正在使用 GORM 来运行 SQL 查询。我正在尝试将 Exec
语句 INSERT
作为 TRANSACTION
,因为我需要能够返回最新插入的 ID。
这是一个代码片段:
query := `
START TRANSACTION;
INSERT INTO something (a,b,c)
VALUES (@arg1,@arg2,@arg3);
SELECT LAST_INSERT_ID();
COMMIT;`
result := DB.Exec(
query,sql.Named("arg1","aaa"),sql.Named("arg2","bbb"),sql.Named("arg3","ccc"),)
我已经通读了 GORM 交易文档,但示例与我的用例大不相同。
我的目标是创建一个 INSERT 语句,并最终返回该创建的最新 ID。使用 MySQL。
有什么想法吗?
解决方法
虽然我不知道您的确切用例,但在这里您似乎并没有真正充分利用 GORM,并且可以通过使用其方法受益。
type Something struct {
ID int
A string
B string
}
something := Something{
A: "Foo",B: "Bar",}
db.Transaction(func(tx *gorm.DB) error {
// save your item in the transaction (use 'tx' from this point,not 'db')
if err := tx.Create(&something).Error; err != nil {
fmt.Println(err.Error())
// returning any error will rollback
return err
}
// do anything else within the transaction...
// return nil will commit the whole transaction
return nil
})
fmt.Printf("%+v/n",something)
之后,原始的 something
变量将包含刚刚创建的 ID:
{
"ID": 26,"A": "Foo","B": "Bar"
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。