如何在BD中只更新我的结构中填写的字段

  • 本文关键字:结构 字段 更新 BD go
  • 更新时间 :
  • 英文 :


我有一个结构来从用户那里获取数据并更新数据库中的信息。然而,如果用户让一个字段为空,那么DB中的对应字段将为空。我不想那样,我只想编辑用户通知的字段。

我的型号:

type Business struct {
Id           uint64 `json:"id,omitempty"`
Company_name string `json:"company_name,omitempty"`
Trading_name string `json:"trading_name,omitempty"`
Facebook     string `json:"facebook,omitempty"`
Instagram    string `json:"instagram,omitempty"`
Tel          string `json:"tel,omitempty"`
User_id      uint64 `json:"user_id,omitempty"`
}

我的控制器:

func EditBusinessInfo(w http.ResponseWriter, r *http.Request) {
params := mux.Vars(r)
businessIDParams, err := strconv.ParseUint(params["businessID"], 10, 64)
if err != nil {
returns.ERROR(w, http.StatusBadRequest, err)
return
}
userIDInToken, err := auth.ExtractUserID(r)
if err != nil {
returns.ERROR(w, http.StatusInternalServerError, err)
return
}
db, err := db.ConnectToDB()
if err != nil {
returns.ERROR(w, http.StatusInternalServerError, err)
return
}
defer db.Close()
repository := repositories.NewUsersRepository(db)
businessInBD, err := repository.GetBusiness(businessIDParams)
if err != nil {
returns.ERROR(w, http.StatusInternalServerError, err)
return
}
if userIDInToken != businessInBD.User_id {
returns.ERROR(w, http.StatusUnauthorized, errors.New("você não pode editar a empresa de outra pessoa"))
return
}
if businessIDParams != businessInBD.Id {
returns.ERROR(w, http.StatusForbidden, errors.New("essa empresa não peertence a você"))
return
}
bodyRequest, err := ioutil.ReadAll(r.Body)
if err != nil {
returns.ERROR(w, http.StatusBadRequest, err)
return
}
var business models.Business
if err := json.Unmarshal(bodyRequest, &business); err != nil {
returns.ERROR(w, http.StatusUnprocessableEntity, err)
return
}
if err := repository.EditBusinessInfo(userIDInToken, business); err != nil {
returns.ERROR(w, http.StatusInternalServerError, err)
return
}
returns.JSON_RESPONSE(w, http.StatusOK, nil)
}

int和string都有默认值,所以如果不给它们赋值,它们将用默认值(0或"(填充。由于它们总是有一个指定的值,所以omiteempty标记永远不会起作用。

这个问题的一个常见解决方案是将结构字段设置为指针,如果没有设置指针,则为零。nil值将触发json封送拆收器识别omiteempty标记。当您向DB中插入这些值时,这些值也将为null/nil。

您应该评估哪些字段需要值,哪些字段可以被允许为空,以防数据库有完整性约束。在处理数据时,您还必须在代码中添加零检查。

最新更新