如何从数据库获取寄存器,然后绑定请求而不删除数据

时间:2019-04-10 23:07:09

标签: postgresql go

我需要对PG上的表进行更新。该请求在表中有一些列或字段。首先将请求绑定到实例,但是当我从数据库获取实体时,然后从请求中删除所有数据。我更喜欢先验证结构的数据,然后再从数据库中获取数据。

package main

import (
  "log"

  "bitbucket.org/company/app/controllers"
  "bitbucket.org/company/gobase/rest"
)

func main() {
  server, routes := rest.NewServer(prefixPath) 
  routes.POST("/data/:id", controllers.Update)
}

模型

type Data struct {
    tableName struct{} `sql:"data"`

    ID        int       `sql:"id,pk"      json:"id"`
    CreatedAt time.Time `sql:"created_at" json:"created_at"`
    Column1   string    `sql:"column1"    json:"column1"`
    Column2   string    `sql:"column2"    json:"column2"`
    Column3   time.Time `sql:"column3"    json:"column3"`
}

控制器:

func Update(c echo.Context) (err error) {
    id, err := strconv.Atoi(c.Param("id"))
    if err != nil {
        return c.JSON(http.StatusBadRequest, err)
    }

    data := Data{}
    if err = c.Bind(&data); err != nil {
        return c.JSON(http.StatusBadRequest, err)
    }

    err := db().Table("data").
      Where("id = ?", id).
      Select(&data)
    if err != nil {
      return c.JSON(http.StatusNotFound, err)
    }

    , err := db(data).
      Where("id = ?", data.ID).
      Update(data)
    if err != nil {
      return c.JSON(http.StatusInternalServerError, err)
    }

    return c.JSON(http.StatusOK, userSocial)
}

如果我先在bd中查找该实体,然后将请求绑定到该实体,则它会完美运行,它只会更新请求字段。但是我更喜欢在搜索数据库之前先验证请求的结构。

0 个答案:

没有答案