我想知道是否可以通过预加载对象中的条件进行选择。例如,我有表User和Profile(一对一)。因此,我需要获取所有具有性别是女性的个人资料的用户。
我认为这可以通过以下方式完成:
Preload("UserProfile").Where("user_profile.sex = ?", "female")
但是它返回类似:
pq:表\“ user_profile \”缺少FROM子句条目
答案 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)
我希望这能解决您的问题。