Postgresql 如何防止GORM使用上一个查询中的参数

Postgresql 如何防止GORM使用上一个查询中的参数,postgresql,go,go-gorm,Postgresql,Go,Go Gorm,我正在使用更新db事务范围内的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)打开日志记录并查看GORM生成的SQL: UPDATE "actions" SET

我正在使用更新db事务范围内的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)
打开日志记录并查看GORM生成的SQL:

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()是正确的方法吗?

您使用的是旧指针,这是产生多个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()
    }