I'm facing a difficulty with the go orm gorm:
I have a structure like this:
type Data struct {
gorm.Model
UserID int `json:"user_id,omitempty"`
AnswerID int `json:"answer_id,omitempty"`
Entities []Entity `gorm:"many2many:data_entities;"`
}
type Entity struct {
gorm.Model
Name string
}
Run Code Online (Sandbox Code Playgroud)
And now, either if I do:
db.Model(&data).Where(Data{AnswerID: data.AnswerID}).Assign(&data).FirstOrCreate(&data)
Run Code Online (Sandbox Code Playgroud)
Or
db.Model(&data).Where(Data{AnswerID: d.AnswerID}).Update(&data)
Run Code Online (Sandbox Code Playgroud)
My many-to-many fields aren't updated but created... Leading to duplications if already exists.
If I try to play with the Related() function, it simply stop updating the foreign field.
Is there a way to update or create properly every tables linked?
到目前为止我唯一找到的是这个:
db.Table("entities").
Where(
"id in (?)",
db.Table("data_entities").
Select("entity_id").
Where(
"data_id = ?",
data.ID,
).
QueryExpr(),
).
Where("entity_name = ?", *entityName).
Update(&data.Entity)
Run Code Online (Sandbox Code Playgroud)
但我在这里发现了2个问题:
1)无法进行更深层次的子请求:
Select("entity_id").
Where(
"data_id = ?",
data.ID,
)...
Run Code Online (Sandbox Code Playgroud)
data.ID如果我想更深入地处理其他子请求,则不会起作用。2)如果有多个多2多,我认为我需要重复查询。