gorm exec 从插入事务返回 ID 与原始 sql

我正在使用 GORM 来运行 SQL 查询。我正在尝试将语句作为,因为我需要能够返回最新插入的ID。ExecINSERTTRANSACTION


下面是一个代码片段:


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。


有什么想法吗?


四季花海
浏览 1239回答 2
2回答

SMILET

虽然我不知道你的确切用例,但似乎在这里你并没有真正充分利用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)之后,原始变量将包含刚刚创建的 ID:something{  "ID": 26,  "A": "Foo",  "B": "Bar"}

阿晨1998

只需执行此示例     var ID int64     tx.Raw("INSERT INTO yourTable (yourColumn) VALUES ('testInsertValue') RETURNING      id").Scan(&ID)我使用tx假设你已经把你的交易设置为tx,你可以用多种方式进行交易。对于返回值,您可以使用模型的结构,而不是像示例中那样仅使用 var ID。谢谢。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go