Describe the feature

当我保存一个存在外键关系的表,如果我设置了外键关系,目前默认会创建不存在的外键项,然后再进行关联,现在我想问下是否可以只关联已经存在的项,而不去创建新的关联项。

例子如下:

type User struct {
   gorm.Model

   Username string
   Hobbies []Hobby
}

type Hobby struct {
  ID uint
  Name string
}

现在已经存在[{ID: 1, Name: "t1"}, {ID: 2, Name: "t2"}]Hobby记录,我现在创建一个用户的语句如下:

user := &User{Username: "u1", Hobbies: [{ID: 1, Name: "t1"}, {ID: 3, Name: "t3}]}
db.Create(user)

请问这种情况下,如何创建一个只关联已存在ID为1的关系,而不新建目前不存在的ID为3的关联项并进行关联。

Motivation

仅关联已经存在的关联项,避免创建额外的关联项

Related Issues

Comment From: ghost

这种情况可以禁用默认的关联创建,自己写一个 hook 方法创建相关的记录,自己控制关联数据的创建. 禁用关联创建: https://gorm.io/zh_CN/docs/create.html#%E5%85%B3%E8%81%94%E5%88%9B%E5%BB%BA 钩子: https://gorm.io/zh_CN/docs/hooks.html

Comment From: li1234yun

@MIA-21 你好!

禁用关联创建的话,关联关系无法被创建,但是这种情况是需要创建关联关系的。 Hook方法倒是可以解决这个问题,但就是每次需要写Hook处理这种情况。

我就是想提个feature,看能不能提供类似Omit/Select这种方法来便捷地解决这个问题。

Comment From: jinzhu

don't sound a reasonable request, it requires extra query when inserting, maybe write a wrapper to remove those invalid associations before saving?