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

标签 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,但它只创建了 User。

我做错了什么?

最佳答案

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

如果你有

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
}

关于Gorm - 与匿名字段有一个关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40721475/

相关文章:

json - 如何在 golang 中使用 Unmarshal 从 json 文档中获取结构中的 json 字符串

google-app-engine - GAE Golang - HTTP JSON RPC 调用在 dev_appserver 中有效,但在 App Engine 中无效?

error-handling - 在 Golang 中运行 exec.Command 时如何调试 "exit status 1"错误

go - 如何正确使用 FirstOrCreate

mysql - 使用 GORM 在 MySQL 中获取 NULL 日期时间值

golang请求头并发读写

generics - 复制 slice 的通用方法

sql - Gorm 在多对多插入中添加多个 slice

Gorm 不更新子结构数组

go - 不能在赋值中使用电话(字符串类型)作为 int 类型