如何验证数据库字段的唯一性?环境:Gin+GORM+[go-playground/validator]

1ySyz2kCwk · · 1327 次点击
## 自定义验证 ### 先写一个函数校验用户名 ``` func UserNameValidate(field validator.FieldLevel) bool { userModel := model.UserModel{} username := field.Field().String() if userModel.CheckUsernameExist(username) { return false } return true } ``` ### 注册到 gin 中间件 ``` r := gin.Default() if v, ok := binding.Validator.Engine().(*validator.Validate); ok { _ = v.RegisterValidation("username_unique", requestValidate.UserNameValidate) } ``` ### 最后表单 tag 可以写 ``` Username string `form:"username" json:"username" binding:"required,username_unique"` ``` 此代码片段来源于我的开源项目:[https://github.com/endachao/goerhub-api](https://github.com/endachao/goerhub-api) ,我正在写一个开源的社区系统,目前刚起了个头。欢迎关注
#4
更多评论
最好是通用性设计,我希望比如打tag这样,要不然以后好几个字段都是unique不至于一个一个手写。
#1
对gorm/validator不熟悉,看的很懵。 理论上说,这种唯一字段的判断,应该不是orm的事,是表单验证的事。 数据库和表单是完全不应该有任何关联的两种对象,一个是用户输入,一个是数据持久化,明显应该用两个不同的struct。 所以,正常情况下,对唯一性的判断要做两件事情。 一个是验证时查找数据库,就是说,理论上你需要一个自定义的验证方法。 另一个是插入失败后的处理。 另外不得不说,不管是orm还是表单验证,通过tag来做真的实在不符合我的审美……
#2