Как запретить GORM использовать параметры из предыдущего запроса - PullRequest
0 голосов
/ 26 февраля 2020

Я использую GORM для обновления 2 сущностей в рамках транзакции БД:

tx = tx.Model(models.Action{}).Where("ID = ?", 1).UpdateColumn("state", "COMPLETE")
tx = tx.Model(models.Claim{}).Where("ID = ?", 2).Update("some_field", nil)

Ожидаемые строки не обновляются, при включении ведения журнала используется db.LogMode(true) и глядя на SQL, который генерирует GORM:

UPDATE "actions" SET "state" = 'COMPLETE'  WHERE (ID = 2) AND (ID = 1)  
UPDATE "claims" SET "some_field" = NULL  WHERE (ID = 2) AND (ID = 1) AND (ID = 2)

Я не понимаю, откуда взялись эти дополнительные AND, единственный способ, которым я могу получить его для генерации желаемых запросов:

UPDATE "actions" SET "state" = 'COMPLETE'  WHERE ID = 1
UPDATE "claims" SET "some_field" = NULL  WHERE ID = 2

... означает добавить New(), поэтому tx.New().Model....

Является ли добавление New () правильным способом сделать это?

1 Ответ

0 голосов
/ 26 февраля 2020

вы используете старый указатель, который является причиной множественного предложения where.

вы должны попробовать его как

err := tx.Model(models.Action{}).Where("ID = ?", 1).UpdateColumn("state", "COMPLETE").Error
    if err != nil {
        tx.Rollback()
    }
err = tx.Model(models.Claim{}).Where("ID = ?", 2).Update("some_field", nil).Error
    if err != nil {
        tx.Rollback()
    }
...