Go 如何选择预加载对象中的按字段?

Go 如何选择预加载对象中的按字段?,go,go-gorm,Go,Go Gorm,我想知道是否可以通过预加载对象中的条件进行选择。例如,我有表User和Profile(一对一)。所以我需要让所有的用户都有女性的个人资料 我想可以这样做: Preload("UserProfile").Where("user_profile.sex = ?", "female") 但它返回的结果类似于: pq:表“用户配置文件”的条款条目中缺少 预加载不会联接指定的表。您需要显式联接有问题的表: Preload(“UserProfile”).Joins(“user.id上的左JOIN user

我想知道是否可以通过预加载对象中的条件进行选择。例如,我有表User和Profile(一对一)。所以我需要让所有的用户都有女性的个人资料

我想可以这样做:

Preload("UserProfile").Where("user_profile.sex = ?", "female")
但它返回的结果类似于:

pq:表“用户配置文件”的条款条目中缺少


预加载不会联接指定的表。您需要显式联接有问题的表:

Preload(“UserProfile”).Joins(“user.id上的左JOIN user\u profile=user\u profile.user\u id”)
。其中(“user_profile.sex=?”,“女性”)

…假设您的主键名为
id
,外键名为
user\u id
,我在最近的一个项目中也遇到了同样的问题。我发现下面的解决方案适合我

var users []User
Preload("UserProfile","sex = ?","female").Find(&users)
然后检查

user.profile!=nil
这种方法的问题是它将加载所有用户

但对你来说,这可能是另一种方式

var profiles []Profile
Preload("User").where("sex = ?","female").Find(&profiles)

我希望这能解决您的问题。

我相信该表实际上被称为
用户配置文件
我发现,我必须使用联接:联接(“left join trade\u items on trade\u items.id=trade\u requests.trade\u item\u id”),然后使用Where(“trade\u items.request\u type=?”,“SELL”)