问题
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