当前位置: 首页 > 知识库问答 >
问题:

如何在gorm中添加enum?

刘选
2023-03-14

我正在写PostgreSQL表模式

type TestTable struct {
    ID        int    `gorm:"column:id;primaryKey;autoIncrement"`
    CarType   string `gorm:"column:car_type"`
}

那么我如何将“轿车”、“掀背车”、“小型货车”等汽车类型添加为枚举数据类型

共有3个答案

曾珂
2023-03-14

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

假设您有DB客户端结构,您可以创建一个创建此汽车类型的方法

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
    }
}
墨星鹏
2023-03-14

附带说明-如果您决定采用稍微不同的方法:您可以将枚举定义为int,并利用iota。然后,您可以使用代码生成器创建sql<code>Scaner/Valuer</code>以及json/text表示。例如:https://github.com/dmarkham/enumer

毕和志
2023-03-14

假设你正在使用 GORM 和 PostgreSQL。首先在数据库中创建一个类型。

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 `gorm:"type:car_type"`
}

func (MyTable) TableName() string {
    return "my_table"
}

请注意,对于MySQL用户,您可以添加结构标签gorm:或sql:,这样您就不必运行原始查询即可在数据库中创建枚举。

CarType carType `gorm:"type:enum('SEDAN', 'HATCHBACK', 'MINIVAN')";"column:car_type"`

运筹学

CarType carType `sql:"type:ENUM('SEDAN', 'HATCHBACK', 'MINIVAN')" gorm:"column:car_type"`
 类似资料:
  • 一切都在问题中,有没有一种方法在extjs中显示€符号?我试过了 但对于欧洲货币(1)来说,它回报了我

  • 我有两张桌子, 我想为changelog实现一个搜索方法,该方法返回字段 如您所见,结果来自两个表的联接。 我发现https://gorm.io/docs/preload.html 但老实说,我不明白我该如何实现我所需要的。 我认为下面的内容可能会有所帮助 问题是,如何从GORM中提到的表格中获得我提到的内容?

  • 我需要在Grails中使用GROUP_CONCAT聚合函数,最好来自HQL,但也可以使用标准。 我有以下疑问: } 还是没运气。我得到: -[METHOD_CALL]methodnode:'('+-[METHOD_NAME]identnode:'group_concat'{originaltext=group_concat}-[EXPR_LIST]sqlnode:'expr list'-[DOT]

  • 问题内容: 您知道如何将新行添加到吗? 问题答案: 的后面处理表后面的所有数据。为了在表格中添加和删除行,您需要使用 要使用此模型创建表: 要添加一行: 您也可以使用此方法删除行。

  • 问题内容: 我从http://code.google.com/p/google-gson/下载了Gson库。归档文件包含以下jar文件: google-gson-1.3 / gson-1.3-javadoc.jar google-gson-1.3 / gson-1.3.jar google-gson-1.3 / gson-1.3-sources.jar 如何设置Eclipse使其能够在项目中使用该

  • 问题内容: 首先,我为我的英语疏忽表示歉意,我将解释我所有的问题。 首先我要在JTable中拥有JCheckBox。 我正在从列索引0和1的数据库中检索学生ID和学生姓名。我希望第三列应该是“缺席/在场”,这将首先根据JCheckbox值来获取学生是否在场。 这是我的JTable值代码: Attendance.java 此代码可从数据库中获取值,并将其保存到矢量中 AttendanceGUI.ja