为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 gorm 中添加枚举?

如何在 gorm 中添加枚举?

Go
宝慕林4294392 2022-09-19 10:40:53
我正在编写后greSQL表架构。type TestTable struct {    ID        int    `gorm:"column:id;primaryKey;autoIncrement"`    CarType   string `gorm:"column:car_type"`}那么我怎么能添加汽车类型,如“轿车”,“掀背车”,“小型货车”作为枚举数据类型
查看完整描述

4 回答

?
POPMUISE

TA贡献1765条经验 获得超5个赞

假设您正在使用戈尔姆。首先在数据库中创建一个类型。


CREATE TYPE car_type AS ENUM (

    'SEDAN',

    'HATCHBACK',

    'MINIVAN');

然后,您需要定义以下模型:


import "database/sql/driver"


type carType string


const (

    SEDAN  carType = "SEDAN"

    HATCHBACK carType = "HATCHBACK"

    MINIVAN carType = "MINIVAN"

)


func (ct *carType) Scan(value interface{}) error {

    *ct = carType(value.([]byte))

    return nil

}


func (ct carType) Value() (driver.Value, error) {

    return string(ct), nil

}


type MyTable struct {

    gorm.Model

    CarType carType `sql:"car_type"`

}


func (MyTable) TableName() string {

    return "my_table"

}


查看完整回答
反对 回复 2022-09-19
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

在旁注中 - 如果您决定采用稍微不同的方法:您可以将枚举定义为int,并利用.然后,您可以使用代码生成器来创建sql,也可以创建json /文本表示形式。例如:https://github.com/dmarkham/enumeriotaScaner/Valuer



查看完整回答
反对 回复 2022-09-19
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

为了扩展Nick的答案,我为自动化添加了以下内容:


假设您有结构,则可以创建一个创建此汽车类型的方法:DBClient


func (psqlClient *DBClient) CreateCarTypeEnum() error {

    result := psqlClient.db.Exec("SELECT 1 FROM pg_type WHERE typname = 'car_type';")


    switch {

    case result.RowsAffected == 0:

        if err := psqlClient.db.Exec("CREATE TYPE car_type AS ENUM ('SEDAN', 'HATCHBACK', 'MINIVAN');").Error; err != nil {

            log.Error().Err(err).Msg("Error creating car_type ENUM")

            return err

        }


        return nil

    case result.Error != nil:

        return result.Error


    default:

        return nil

    }

}


查看完整回答
反对 回复 2022-09-19
?
撒科打诨

TA贡献1934条经验 获得超2个赞

更新,它将不工作,而是使用 。一旦您在数据库中手动创建了自定义枚举类型,也是如此。sql:"car_type"gorm:"car_type"



查看完整回答
反对 回复 2022-09-19
  • 4 回答
  • 0 关注
  • 303 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号