亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 GORM 將選項添加到數據庫字段

如何使用 GORM 將選項添加到數據庫字段

Go
慕森卡 2022-09-05 09:44:58
我對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來存儲表。提前致謝!
查看完整描述

2 回答

?
繁星點點滴滴

TA貢獻1803條經驗 獲得超3個贊

假設 您在 和 之間有一對一的關系,那么使用外鍵的一種方法是這樣的:rolesusers


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"`

   RoleID    int64  `json:"role_id"` 

   Role      *Role `json:"role"`

}


type Role struct {

   ID   int64 `json:"id"`

   Name string `json:"name"`

}


//load data

var users []User

err := db.Preload("Role").Find(&users).Error

編輯:多對多關系的解決方案


假設您將有一個像鏈接和表的表,一個解決方案可能如下所示:users_rolesusersroles


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"`

   Roles      []*Role `gorm:"many2many:users_roles;" json:"roles"`

}


type Role struct {

   ID   int64 `json:"id"`

   Name string `json:"name"`

}


//load data

var users []User

err := db.Preload("Roles").Find(&users).Error


查看完整回答
反對 回復 2022-09-05
?
慕的地10843

TA貢獻1785條經驗 獲得超8個贊

對于 PostGreSQL,首先在數據庫中手動創建枚舉


CREATE TYPE user_access AS ENUM (

    'admin',

    'user'

);

然后


type Role string


const (

    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問題和文檔


查看完整回答
反對 回復 2022-09-05
  • 2 回答
  • 0 關注
  • 146 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號