How to update with a many-to-many relationship

Jay*_*Cee 6 go go-gorm

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?

Jay*_*Cee 0

到目前为止我唯一找到的是这个:

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多,我认为我需要重复查询。