Gorm - 与匿名字段有一个关系

时间:2016-11-21 13:34:19

标签: go go-gorm

我使用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)

我希望它能够创建UserAssociation,但它只会创建用户。

我做错了什么?

1 个答案:

答案 0 :(得分: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
}