Gorm несколько транзакций, чтобы удалить старые условия поиска - PullRequest
0 голосов
/ 17 июня 2019
    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 удалил условие datetime. Второй SQL принимает первое условие поиска SQL. Как мне удалить это условие и использовать его в транзакции?

1 Ответ

0 голосов
/ 18 июня 2019

Я бы предложил иметь два отдельных объекта запроса:

    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()
...