Gorm UUID外键-属于



我正在尝试创建一个属于的使用GORM,我的代码如下:

type Shop struct {
ID    uuid.UUID `json:"id" gorm:"primaryKey;type:uuid"`
Name  string    `json:"name" gorm:"not null" validate:"required"`
City  string    `json:"city" gorm:"not null" validate:"required"`
State string    `json:"state" gorm:"not null" validate:"required"`
}
type Employee struct {
ID        uuid.UUID `json:"id" gorm:"primaryKey;type:uuid"`
FirstName string    `json:"first_name" gorm:"not null" validate:"required"`
LastName  string    `json:"last_name" gorm:"not null" validate:"required"`
Email     string    `json:"email" gorm:"not null;unique" validate:"required,email"`
Password  string    `json:"password" gorm:"not null" validate:"required"`
Active    bool      `json:"active" gorm:"not null;default:false"`
ShopId    uuid.UUID `json:"shop_id" gorm:"type:uuid"`
Shop      Shop      `gorm:"foreignKey:ShopID"`
}

当我运行迁移时,弹出以下错误:

[error] invalid field found for struct .../.../.../api/models.Employee's field Shop: define a valid foreign key for relations or implement the Valuer/Scanner interface

我发现一些引用使用数字主键,他们似乎工作得很好,但我找不到任何解决方案与uuid工作…

我不确定,但我对消息错误的理解是类型uuid.UUID没有实现接口Valuer和Scanner的方法。

您应该创建自己的类型UUID,它可以是这样的:

type UUID uuid.UUID
func(id UUID) Value() (driver.Value, error) {   
return id.String(), nil
}
func (id *UUID) Scan(value interface{}) error {
dbID, ok := value.(string)
if !ok {
return errors.New("id scan: invalid value")
}


*e = uuid.MustParse(dbID)
return nil
}

并在结构体的定义中使用它:

type Shop struct {
ID    UUID `json:"id" gorm:"primaryKey;type:uuid"`
//...
}

相关内容

  • 没有找到相关文章

最新更新