Postgresql 如何防止GORM使用上一个查询中的参数
我正在使用更新db事务范围内的2个实体: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
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()
}