Как выбрать по полям в предварительно загруженном объекте? - PullRequest
1 голос
/ 12 апреля 2019

Интересно, можно ли выбрать по условию в предварительно загруженном объекте. Например, у меня есть таблицы User и Profile (один в один). Поэтому мне нужно получить всех пользователей с профилями, где секс женский.

Я думал, что это можно сделать примерно так:

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

Но он возвращает что-то вроде:

pq: отсутствует запись предложения FROM для таблицы \ "user_profile \"

Ответы [ 2 ]

1 голос
/ 16 апреля 2019

Предварительная загрузка не объединяет указанные таблицы. Вам необходимо явно присоединиться к рассматриваемой таблице:

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

... Предполагается, что ваш первичный ключ называется id, а внешний ключ называется user_id.

0 голосов
/ 19 апреля 2019

Я также столкнулся с той же проблемой в недавнем проекте.Я обнаружил, что приведенное ниже решение работает для меня.

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

, а затем проверил наличие

user.profile!=nil

. Проблема в этом подходе заключается в загрузке всех пользователей.

Но в вашем случае это может быть другой путь.

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

Я надеюсь, что это решит вашу проблему.

...