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

时间:2019-04-12 16:28:14

标签: go go-gorm

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

我认为这可以通过以下方式完成:

Preload("UserProfile").Where("user_profile.sex = ?", "female")

但是它返回类似:

  

pq:表\“ user_profile \”缺少FROM子句条目

2 个答案:

答案 0 :(得分:1)

预加载未加入指定的表。您需要显式加入相关表:

Preload("UserProfile").Joins("LEFT JOIN user_profile ON user.id = user_profile.user_id")
    .Where("user_profile.sex = ?", "female")

...假设您的主键称为id,外键称为user_id

答案 1 :(得分:0)

在最近的项目中,我也遇到了同样的问题。我找到了以下适合我的解决方案。

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

然后检查

user.profile!=nil

此方法的问题在于它将加载所有用户。

但是对于您而言,这可能是另一种解决方法。

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

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