为了账号安全,请及时绑定邮箱和手机立即绑定

如何保存与Gorm的一对一关系?

如何保存与Gorm的一对一关系?

Go
叮当猫咪 2022-05-05 16:05:56
如何保存用户与 Gorm 和 Postgres 的地址关系?package mainimport (    "fmt"    "log"    "github.com/jinzhu/gorm"    _ "github.com/jinzhu/gorm/dialects/postgres")var (    pgUri = "postgres://postgres@127.0.0.1:5432/postgres?sslmode=disable")type User struct {    gorm.Model    Email   string    Address Address}type Address struct {    gorm.Model    Street  string    City    string    Country string}func main() {    db, err := gorm.Open("postgres", pgUri)    if err != nil {        log.Fatalf("Failed to connect Postgres: %v\n", err)    }    // Checked two tables (user, address) created in database    db.AutoMigrate(&User{}, &Address{})    defer db.Close()    u := User{        Email: "some@one.com",        Address: Address{            Street:  "One street",            City:    "Two city",            Country: "Three country",        },    }    fmt.Println(u)    if err := db.Create(&u).Error; err != nil {        panic(err)    }    if err := db.Save(&u).Error; err != nil {        panic(err)    }}在我运行它之后go run main.go:{{0 0001-01-01 00:00:00 +0000 UTC 0001-01-01 00:00:00 +0000 UTC <nil>} some@one.com {{0 0001-01-01 00:00:00 +0000 UTC 0001-01-01 00:00:00 +0000 UTC <nil>} One street Two city Three country}}它会创建一个新用户,但不会创建任何地址。
查看完整描述

1 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

您在关联中缺少外键Address。对于一个has one的关系,必须存在一个外键字段,拥有者会将其所属模型的主键保存到这个字段中。


type User struct {

    gorm.Model

    Email   string

    Address Address // One-To-One relationship (has one - use Address's UserID as foreign key)

}


type Address struct {

    gorm.Model

    UserID  uint

    Street  string

    City    string

    Country string

}


查看完整回答
反对 回复 2022-05-05
  • 1 回答
  • 0 关注
  • 162 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信