Gorm - Has One relation with anonymous field

岁酱吖の 提交于 2021-01-28 19:32:40

问题


I use Golang and GORM. I have a User structure which has one Association.

type User struct {
    ID       int
    ...
}

type Association struct {
    ID       int
    UserID   int
}

I also have an AssoUser structure, which is composed of a anonymous field User, and has a pointer to Assocation.

type AssoUser struct {
    User
    Asso *Association
}

When I run

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

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

I expect it to create the User AND the Association, but it only creates the User.

What am I doing wrong ?


回答1:


I was having a similar issue, but I discovered it was an issue with anonymous types.

If you have

type Thing struct {
    Identifier string
    ext
}

type ext struct {
    ExtValue string
}

gorm won't be able to find ext, so it won't appear in the table at all.

However, if you have

type Thing struct {
    Identifier string
    Ext
}

type Ext struct {
    ExtValue string
}

ExtValue will appear in the table as a normal string, as if it were a part of the Thing object.

If you want to make a has-one relationship, you have to include an id in your struct. So the above example would look like this:

type Thing struct {
    Identifier string
    Ext
}

type Ext struct {
    ThingId  uint
    ExtValue string
}


来源:https://stackoverflow.com/questions/40721475/gorm-has-one-relation-with-anonymous-field

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!