我正在尝试使用golang创建一个rest API。每次创建用户时,我都想创建一个与该用户相关联的“个人资料”。
我最初的想法是先创建用户,然后分别创建引用用户ID的配置文件并将其插入数据库。
我不确定是否应该使用这种思维方式,因为我只是从语言入手。
使用以下代码,我创建了用户,但无法创建配置文件。我收到此错误:using unaddressable value
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
}
我希望有人能够帮助我了解这里出了什么问题?
答案 0 :(得分:0)
您应该在gorm的Create方法上传递一个指针,以在创建后填充模型...
GetDB().Create(&profile)
但是,如https://gorm.io/docs/associations.html gorm中所示,自动创建关联。
您可以像这样更改模型...(我假设用户和个人资料之间存在1..1关系好吗?) 一切都会自动完成
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:"-"`
Profile Profile
ProfileID uint
}
type Profile struct {
gorm.Model
UserID uint
FirstName string `gorm:"default:'John'"`
LastName string `gorm:"default:'Doe'"`
Description string `gorm:"default:'Mysterious'"`
}