1

我使用 Golang 和 GORM。我有一个User结构,其中有一个Association.

type User struct {
    ID       int
    ...
}

type Association struct {
    ID       int
    UserID   int
}

我还有一个AssoUser结构,它由一个匿名字段组成User,并有一个指向Assocation.

type AssoUser struct {
    User
    Asso *Association
}

当我跑

var assoUser AssoUser
assoUser.Asso = &Association{
   Name : "asso_name",
   ...
}
assoUser.Name = "user_name"
...

// filling the struct
db.Debug().Create(&assoUser)

我希望它创建UserAND Association,但它只创建用户。

我究竟做错了什么 ?

4

1 回答 1

0

我遇到了类似的问题,但我发现这是匿名类型的问题。

如果你有

type Thing struct {
    Identifier string
    ext
}

type ext struct {
    ExtValue string
}

gorm 将无法找到ext,因此它根本不会出现在表格中。

但是,如果你有

type Thing struct {
    Identifier string
    Ext
}

type Ext struct {
    ExtValue string
}

ExtValue将作为普通字符串出现在表中,就好像它是Thing对象的一部分。

如果你想建立一对一的关系,你必须在你的结构中包含一个 id。所以上面的例子看起来像这样:

type Thing struct {
    Identifier string
    Ext
}

type Ext struct {
    ThingId  uint
    ExtValue string
}
于 2017-02-01T00:29:23.017 回答