如何使用 GORM 将选项添加到数据库字段

我对Golang很陌生,因为我主要用Python编写代码,所以遇到了一个我无法解决的问题。如果可以的话,我想通过GORM或任何其他方式向Golang Struct中的字段添加选择。


我的模型看起来像这样


type User struct{

   FirstName string  `gorm:"size:100" json:"first_name"`

   LastName  string  `gorm:"size:100" json:"last_name"`

   Email     *string `gorm:"size:250;index;not null;index:email;unique" json:"email"`

   Role      string  `gorm:"default:User;not null" json:"is_active"` // TODO Add Choice

}

我想从 ['Admin'、'User'、'Guest'] 向用户模型中的角色字段添加选项。有没有办法使用GORM或任何其他方法来解决我的问题来实现它?如果没有直接的方法,我可以把它做成一个外键。我正在使用PostgreSQL来存储表。提前致谢!


慕森卡
浏览 158回答 2
2回答

繁星点点滴滴

假设 您在 和 之间有一对一的关系,那么使用外键的一种方法是这样的:rolesuserstype User struct{   ID        int64 `json:"id"`   FirstName string  `gorm:"size:100" json:"first_name"`   LastName  string  `gorm:"size:100" json:"last_name"`   Email     *string `gorm:"size:250;index;not null;index:email;unique" json:"email"`   RoleID    int64  `json:"role_id"`    Role      *Role `json:"role"`}type Role struct {   ID   int64 `json:"id"`   Name string `json:"name"`}//load datavar users []Usererr := db.Preload("Role").Find(&users).Error编辑:多对多关系的解决方案假设您将有一个像链接和表的表,一个解决方案可能如下所示:users_rolesusersrolestype User struct{   ID        int64 `json:"id"`   FirstName string  `gorm:"size:100" json:"first_name"`   LastName  string  `gorm:"size:100" json:"last_name"`   Email     *string `gorm:"size:250;index;not null;index:email;unique" json:"email"`   Roles      []*Role `gorm:"many2many:users_roles;" json:"roles"`}type Role struct {   ID   int64 `json:"id"`   Name string `json:"name"`}//load datavar users []Usererr := db.Preload("Roles").Find(&users).Error

慕的地10843

对于 PostGreSQL,首先在数据库中手动创建枚举CREATE TYPE user_access AS ENUM (    'admin',    'user');然后type Role stringconst (    Admin  Role = "admin"    User   Role = "user")func (r *Role) Scan(value interface{}) error {    *r = Role(value.([]byte))    return nil}func (r Role) Value() (driver.Value, error) {    return string(r), nil}type User struct{   ID        int64   `json:"id"`   FirstName string  `gorm:"size:100" json:"first_name"`   LastName  string  `gorm:"size:100" json:"last_name"`   Email     *string `gorm:"size:250;index;not null;index:email;unique" json:"email"`   Role      Role    `sql:"type:user_access"` // PostGreSQL   Role      Role    `json:"role" sql:"type:ENUM('admin', 'user')"` // MySQL}有关更多信息,您可以查看github问题和文档
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go