我有以下型号...
type User struct {
ID string `sql:"type:uuid;primary_key;default:uuid_generate_v4()"`
FirstName string `form:"first_name" json:"first_name,omitempty"`
LastName string `form:"last_name" json:"last_name,omitempty"`
Password string `form:"password" json:"password" bindind:"required"`
Email string `gorm:"type:varchar(110);unique_index" form:"email" json:"email,omitempty" binding:"required"`
Location string `form:"location" json:"location,omitempty"`
Avatar string `form:"avatar" json:"avatar,omitempty"`
BgImg string `form:"bg_img" json:"bg_img,omitempty"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt time.Time
}
我已经尝试了几种不同的方法,但这种方法抛出(pq: relation "users" does not exist)
。我没有相关的模型,它实际上只是一个模型。
我试过用...
func (user *User) BeforeCreate(scope *gorm.Scope) error {
scope.SetColumn("ID", uuid.NewV4())
return nil
}
沿着一个uuid lib,但也没有运气。
7条答案
按热度按时间vyswwuz21#
原来我试图将UUID存储为错误的类型,我正在做...
在需要的时候...
p5fdfcr12#
对于
postgresql
,下面是我所做的:go get github.com/google/uuid
uuid.UUID
(来自“github.com/google/uuid“)作为类型,例如
例如
更新:页码14+
gen_random_uuid()
Doron Segal
的注解中所提到的)*PG 14具有内建函数x1E0 F1 x,以生成UUIDv4,例如:
创建表:
创建表uuid_test(uid文本默认gen_random_uuid());
插入一行:
插入uuid_test(uid)值(默认值);
然后自动生成
uid
列。类似的,在go中,我认为可以使用函数作为默认值,例如:
身份证号uuid.UUID
gorm:"type:uuid;default:gen_random_uuid()"
顺便说一句,
gen_random_uuid()
功能现在只支持uuidv4,要使用其他版本,您还需要uuid-ossp
扩展。rryofs0p3#
为此,您将需要gorm和go.uuid
尝试创建自己的模型基础模型来代替
gorm.Model
,如下所示:然后,在创建任何记录之前,使用名为的方法填充此字段,如下所示:
因此,对于您的特定情况,您将:
有关这方面的更多详细信息,请参阅here
vzgqcmou4#
这是我为Gorm v1.21设计的解决方案
第一个
备注:
1.对于Google UUID包,方法
uuid.New()
和uuid.NewString()
使用UUID版本4。这在文档(http://pkg.go.dev/github.com/google/uuid)中没有明确说明,但通过查看源代码,您可以看到这些是uuid.NewRandom()
(声明为UUID版本4)周围的 Package 器。1.虽然有些人推荐Satori UUID包(https://github.com/satori/go.uuid),但基准测试显示,它的性能比Google UUID包(https://gist.github.com/mattes/69a4ab7027b9e8ee952b5843e7ca6955)低3.3倍
dzjeubhm5#
错误
(pq: relation "users" does not exist)
通常表示,tableusers
在数据库中不存在,与两个模型之间的关系无关。所以基本上,你首先需要在数据库中创建表(或自动迁移数据库按照@Apin的建议).并尝试重新运行相同的代码.
b1uwtaje6#
这些都不适合我使用gorm v1.21的情况,这里是我的解决方案。注意,我使用的是satori/go.uuid库来生成UUID,但是google库的代码几乎是相同的。
cdmah0mi7#
现在我使用Gorm 2.0,这工作:
第一个