如何使用GORM初始化带有外键约束的结构并将其插入数据库
我正试图用golang创建一个RESTAPI。每次创建用户时,我都会创建一个与该用户关联的“配置文件” 我最初的想法是首先创建用户,然后分别创建引用用户ID的概要文件并将其插入数据库 我不确定这种想法是否与应该使用的方式一致,因为我只是从语言开始 使用下面的代码,我创建了用户,但无法创建配置文件。我收到此错误:如何使用GORM初始化带有外键约束的结构并将其插入数据库,go,go-gorm,Go,Go Gorm,我正试图用golang创建一个RESTAPI。每次创建用户时,我都会创建一个与该用户关联的“配置文件” 我最初的想法是首先创建用户,然后分别创建引用用户ID的概要文件并将其插入数据库 我不确定这种想法是否与应该使用的方式一致,因为我只是从语言开始 使用下面的代码,我创建了用户,但无法创建配置文件。我收到此错误:使用不可寻址值 var db *gorm.DB func GetDB() *gorm.DB { return db } type User struct { gorm.
使用不可寻址值
var db *gorm.DB
func GetDB() *gorm.DB {
return db
}
type User struct {
gorm.Model
Email string `gorm:"type:varchar(100);unique_index"`
Password string `json:"password"`
Name string `json:"name"`
Token string `json:"token";sql:"-"`
}
type Profile struct {
gorm.Model
User User `gorm:"foreignkey:UserRefer"` // use UserRefer as foreign key
UserRefer uint
FirstName string `gorm:"default:'John'"`
LastName string `gorm:"default:'Doe'"`
Description string `gorm:"default:'Mysterious'"`
}
func (user *User) Create() (map[string]interface{}) {
if resp, ok := user.Validate(); !ok {
return resp
}
hashedPassword, _ := bcrypt.GenerateFromPassword([]byte(user.Password), bcrypt.DefaultCost)
user.Password = string(hashedPassword)
GetDB().Create(user)
profile := Profile{}
profile.UserRefer = user.ID
GetDB().Create(profile)
if user.ID <= 0 {
return u.Message(false, "Failed to create account, connection error.")
}
response := u.Message(true, "Account has been created")
response["user"] = user
return response
}
var db*gorm.db
func GetDB()*gorm.DB{
返回数据库
}
类型用户结构{
戈姆模型
电子邮件字符串`gorm:“类型:varchar(100);唯一索引”`
密码字符串`json:“密码”`
名称字符串`json:“名称”`
令牌字符串`json:“令牌”;sql:-”`
}
类型配置文件结构{
戈姆模型
User`gorm:“foreignkey:userrefere”`//使用userrefere作为外键
用户参考单元
FirstName字符串`gorm:“默认值:'John'”`
LastName字符串`gorm:“默认值:'Doe'”`
描述字符串'gorm:“默认值:'神秘'`
}
func(user*user)Create()(映射[字符串]接口{}){
如果resp,ok:=user.Validate();!ok{
返回响应
}
hashedPassword,:=bcrypt.GenerateFromPassword([]字节(user.Password),bcrypt.DefaultCost)
user.Password=string(hashedPassword)
GetDB().Create(用户)
配置文件:=配置文件{}
profile.userrefere=user.ID
GetDB().Create(配置文件)
如果user.ID您应该在gorm的Create方法上传递一个指针,以便在创建后填充您的模型
GetDB()。创建(&profile)
但是,正如gorm中所示,自动创建关联
你可以改变你的模型,就像这样…(我假设用户和配置文件有一个1..1的关系,好吗?)
一切都会自动完成
类型用户结构{
戈姆模型
电子邮件字符串`gorm:“类型:varchar(100);唯一索引”`
密码字符串`json:“密码”`
名称字符串`json:“名称”`
令牌字符串`json:“令牌”;sql:-”`
剖面
轮廓标识单元
}
类型配置文件结构{
戈姆模型
用户标识单元
FirstName字符串`gorm:“默认值:'John'”`
LastName字符串`gorm:“默认值:'Doe'”`
描述字符串'gorm:“默认值:'神秘'`
}
您应该在gorm的创建方法上传递一个指针,以便在创建后填充模型
GetDB()。创建(&profile)
但是,正如gorm中所示,自动创建关联
你可以改变你的模型,就像这样…(我假设用户和配置文件有一个1..1的关系,好吗?)
一切都会自动完成
类型用户结构{
戈姆模型
电子邮件字符串`gorm:“类型:varchar(100);唯一索引”`
密码字符串`json:“密码”`
名称字符串`json:“名称”`
令牌字符串`json:“令牌”;sql:-”`
剖面
轮廓标识单元
}
类型配置文件结构{
戈姆模型
用户标识单元
FirstName字符串`gorm:“默认值:'John'”`
LastName字符串`gorm:“默认值:'Doe'”`
描述字符串'gorm:“默认值:'神秘'`
}