Gorm 多个事务以删除旧的搜索条件

标签 go go-gorm

    bg := Db.Begin()
    UDebt := make([]UserDebt, 0)
    page, _ := strconv.Atoi(c.DefaultPostForm("page", "1"))
    limit, _ := strconv.Atoi(c.DefaultPostForm("limit", "20"))
    db := Db.Model(&UDebt).Preload("User")
    start := c.PostForm("start")
    if start != "" {
        db = db.Where("datetime >= ?", start)
        bg = bg.Where("datetime >= ?", start)
    }

    debts := make([]UserDebt,0)
    bg.Debug().Set("gorm:query_option", "FOR UPDATE").Limit(limit).Offset(page).Find(&debts)
    // show sql: SELECT * FROM `user_debt`  WHERE (datetime >= '2019-06-16 00:00:00') LIMIT 20 OFFSET 1 FOR UPDATE
    // I hope this is a new connection without any conditions.
    bg.Debug().Model(&UserBet{}).Where("id in (?)",arrayID).Update("is_read",1)
    // show sql: UPDATE `user_bet` SET `is_read` = '1'  WHERE (datetime >= '2019-06-16 00:00:00') AND (id in ('17','18','19','20','21','22'))  
    bg.Commit()

我希望第二个 SQL 删除日期时间条件。 第二个 SQL 采用第一个 SQL 搜索条件。如何删除此条件并在交易中使用它?

最佳答案

我建议有两个单独的查询对象:

    bg := Db.Begin()
    UDebt := make([]UserDebt, 0)
    page, _ := strconv.Atoi(c.DefaultPostForm("page", "1"))
    limit, _ := strconv.Atoi(c.DefaultPostForm("limit", "20"))
    // Use the bg object so this is all done in the transaction
    db := bg.Model(&UDebt).Preload("User")
    start := c.PostForm("start")
    if start != "" {
        // Don't change the original bg object
        db = db.Where("datetime >= ?", start)
    }

    debts := make([]UserDebt,0)
    // Use the newly created db object to store the query options for that
    db.Debug().Set("gorm:query_option", "FOR UPDATE").Limit(limit).Offset(page).Find(&debts)
    bg.Debug().Model(&UserBet{}).Where("id in (?)",arrayID).Update("is_read",1)
    bg.Commit()

关于Gorm 多个事务以删除旧的搜索条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56636297/

相关文章:

mysql - 如何在 Go-Gorm 中禁用默认错误记录器

go - 我的查找功能是否遵循最佳实践

go - 如何用 gorm 填充和嵌入数组?

for-loop - 在 for 循环中避免 "declared but not used"错误的技巧?

go - 使用自定义状态代码提供 html 文件

go - gorm没有在数据库模式中建立外键关系

sql-server - 使用GORM在同一张表上设置两个外键时,MS-SQL服务器引发错误

go - 如何捕获像 ctrl+c 这样的 os 信号并通过 gorilla websocket 在 go 中发送它们

string - 将行结尾转换为 "\n"文字

file - 如何正确复制二进制文件