英文:
Preventing null (or empty string values in the db)
问题
我正在使用PostgreSQL和GORM在我的Go应用程序中。
我以为在struct的sql标签中使用sql:"not null"
可以防止空值的输入,但是当Go初始化带有string类型的struct时,默认值是空字符串,而不是数据库中的null。
我想知道是否有一种方法可以在struct定义中防止这种情况发生,这样我就不必在应用程序代码的所有层级上严格执行它。
英文:
I'm using PostgreSQL and GORM in my Go app.
I thought that using the sql tab of sql:"not null"
would do the trick of preventing a null entry, but when go initializes structs with a string type then it defaults to an empty string which is not the same as null in the db.
I am wondering if there is a way to prevent this from happening in a struct definition so I wouldn't have to strictly enforce it at all levels in the application code.
答案1
得分: 23
你可以通过同时使用default: null
和not null
约束来解决防止将空字符串插入数据库的问题。因此,如果结构字段的值为空,它将被视为默认值null
,并且gorm将抛出错误。
示例代码如下:
type User struct {
gorm.Model
Email string `gorm:"unique;not null;type:varchar(100);default:null"`
}
因此,对于空的User.Email
,gorm将抛出错误。
英文:
You can solve this problem of preventing '' (empty) string insertion into the database by using default: null
and not null
constraint together. SO if Struct field values are empty it will be consider as default value null
and gorm will throw an error.
> gorm:"unique;not null;type:varchar(100);default:null"
Example is:
type User struct {
gorm.Model
Email string `gorm:"unique;not null;type:varchar(100);default:null"`
}
SO gorm for empty User.Email
will throw an error.
答案2
得分: 0
当我使用这样的代码时,它可以正常工作,但是当我执行自动迁移时,gorm 报错了。
英文:
type User struct {
gorm.Model
Email string `gorm:"unique;not null;type:varchar(100);default:null"`
}
When I use like this it works but when I automigrate I did had error from migration gorm
答案3
得分: 0
为你的模型添加一个isValid()函数,如果默认值中存在非空字段(int为0,string为""等),则返回false。在插入之前,检查是否有效,如果无效则返回错误,否则返回nil。
英文:
Add a isValid() function to your model that returns false if a not null field is in its defalt (0 for int, "" for string, etc), and before insert, check if valid, return an error if not valid, else, nil.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论