|
@@ -60,8 +60,27 @@ func (r *webForwardingRepository) AddWebForwarding(ctx context.Context, req *mod
|
|
|
}
|
|
|
|
|
|
func (r *webForwardingRepository) EditWebForwarding(ctx context.Context, req *model.WebForwarding) error {
|
|
|
- if err := r.db.WithContext(ctx).Updates(req).Error; err != nil {
|
|
|
- return err
|
|
|
+ forceUpdateFields := map[string]interface{}{
|
|
|
+ "domain": req.Domain,
|
|
|
+ }
|
|
|
+ // 核心逻辑:
|
|
|
+ // 1. Model(req): 定位要更新的记录。
|
|
|
+ // 2. Updates(req): 先用 struct 更新。GORM 会自动忽略 req 中的零值字段。
|
|
|
+ // - 如果 req.Domain 是 "abc",它会被更新。
|
|
|
+ // - 如果 req.Domain 是 "",它会被忽略。
|
|
|
+ // - 如果 req.TargetURL 是 "xyz",它会被更新。
|
|
|
+ // - 如果 req.TargetURL 是 "",它会被忽略。
|
|
|
+ // 3. Updates(forceUpdateFields): 接着用 map 更新。这会无视零值,强制更新 map 中指定的字段。
|
|
|
+ // - 它会用 req.Domain 的值(无论是 "abc" 还是 "")覆盖上一步的结果。
|
|
|
+ //
|
|
|
+ // 最终效果:
|
|
|
+ // - Domain 字段总能被正确更新(无论新值是不是 "")。
|
|
|
+ // - 其他字段遵循 GORM 的默认行为(非零值才更新)。
|
|
|
+ // - 这一切都在一个 UPDATE 语句中完成。
|
|
|
+ db := r.db.WithContext(ctx).Model(req).Updates(req).Updates(forceUpdateFields)
|
|
|
+
|
|
|
+ if db.Error != nil {
|
|
|
+ return db.Error
|
|
|
}
|
|
|
return nil
|
|
|
}
|