我需要对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中查找该实体,然后将请求绑定到该实体,则它会完美运行,它只会更新请求字段。但是我更喜欢在搜索数据库之前先验证请求的结构。