做個記錄,gorm在更新字段的時候,如果字符串字段是空的,那麼將不會更新到數據庫。
type Student struct {
Model
Email string `form:"email" json:"email"`
Name string`form:"name" json:"name"`
}
func(c *Content) update(content Content) (err) {
err = db.Model(&Content{}).Debug().Where("id = ?", 123).Update(&content).Error
}
這邊暫時採用map[string]interface{}來進行更新
var curBadgeClaim *BadgeClaim
getRes := uc.data.DB(ctx).Model(&badgeClaim).
Where(BadgeClaim{ClaimData: &apiBadgeV1.ClaimData{UserId: badgeClaim.UserId, BadgeId: badgeClaim.BadgeId}}).
Find(&curBadgeClaim)
if getRes.Error != nil {
err = getRes.Error
return
}
if curBadgeClaim == nil || getRes.RowsAffected == 0 {
err = uc.data.DB(ctx).Create(&badgeClaim).Error
if err != nil {
return
}
curBadgeClaim = badgeClaim
} else {
// 由於json:"err,omitempty" 空字符串不寫入,所以這邊單獨設置map
updMap := map[string]interface{}{
"claim_status": badgeClaim.ClaimStatus,
"claim_time": badgeClaim.ClaimTime,
"transaction_hash": badgeClaim.TransactionHash,
"user_attrs": badgeClaim.UserAttrs,
"err": badgeClaim.Err,
}
db := uc.data.DB(ctx).Model(&badgeClaim).
Where(BadgeClaim{ClaimData: &apiBadgeV1.ClaimData{UserId: badgeClaim.UserId, BadgeId: badgeClaim.BadgeId}}).
Updates(updMap)
if db.Error != nil {
uc.log.WithContext(ctx).Warnf(fmt.Sprintf("ClaimUsecase::Replace badgeClaim:%v err:%v", badgeClaim, db.Error))
err = db.Error
return
}
}