如何在 gorm 中添加枚举?

dee*_*zad 8 go go-gorm

我正在编写 PostgreSQL 表架构。

type TestTable struct {
    ID        int    `gorm:"column:id;primaryKey;autoIncrement"`
    CarType   string `gorm:"column:car_type"`
}
Run Code Online (Sandbox Code Playgroud)

那么我如何添加“SEDAN”、“HATCHBACK”、“MINIVAN”等汽车类型作为枚举数据类型

Nic*_*ick 23

假设您将 GORM 与 PostgreSQL 一起使用。首先在数据库中创建一个类型。

CREATE TYPE car_type AS ENUM (
    'SEDAN',
    'HATCHBACK',
    'MINIVAN');
Run Code Online (Sandbox Code Playgroud)

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

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"
}
Run Code Online (Sandbox Code Playgroud)

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

CarType carType `gorm:"type:enum('SEDAN', 'HATCHBACK', 'MINIVAN')";"column:car_type"`
Run Code Online (Sandbox Code Playgroud)

或者

CarType carType `sql:"type:ENUM('SEDAN', 'HATCHBACK', 'MINIVAN')" gorm:"column:car_type"`
Run Code Online (Sandbox Code Playgroud)

  • 我遵循了相同的步骤,并且还从这个答案所基于的主要 github 问题中引用了它,但对我来说,行 => CarType carType `sql:"car_type"` 只是在 postgres DB 中创建一个文本(字符串)列,我已经在我的数据库中创建了枚举。我尝试了一切,没有抛出任何错误,不知道问题出在哪里。有相同问题或解决方案的朋友请回复。 (2认同)
  • @Mehta 我们通过使用 `gorm:"type:car_type"` 使其工作 (2认同)