# #go
Вопрос:
Я пытаюсь выполнить запрос с подзапросом и присоединением в GoBuffalo.pop (github.com/gobuffalo/pop). Я изменяю существующий запрос с помощью соединения (автоматически выполняемого ГоБуффало). Я пытаюсь добавить подзапрос к этому запросу, но это приводит к тому, что СОЕДИНЕНИЕ не работает.
Первоначально это был мой запрос:
r.db.Where("tenant_id = ?", tenantID).Order("sequence ASC").Eager().All(questions)
Моя таблица бд questions
имеет отношение «один к question_answer_options
одному», и question_answer_options
записи автоматически загружаются в свойство среза в структуре вопроса, потому что я звоню Eager()
.
type Question struct {
ID int64 `db:"id" json:"id"`
UUID uuid.UUID `db:"uuid" json:"uuid"`
Text string `db:"text" json:"text"`
Hint string `db:"hint" json:"hint"`
InputType string `db:"input_type" json:"input_type"`
AnswerOptions []QuestionAnswerOption `has_many:"question_answer_options" json:"answer_options"`
Sequence int64 `db:"sequence" json:"sequence"`
Enabled bool `db:"enabled" json:"enabled"`
TenantID int64 `db:"tenant_id" json:"tenant_id"`
CreatedAt time.Time `db:"created_at"`
UpdatedAt time.Time `db:"updated_at"`
AnswerCount int64 `db:"answer_count" rw:"r" json:"answer_count"`
}
Это мой измененный запрос, в котором я выбираю поля вопроса с добавлением подзапроса:
r.db.Select("questions.created_at", "questions.enabled", "questions.hint", "questions.id", "questions.input_type", "questions.sequence", "questions.tenant_id", "questions.text", "questions.updated_at", "questions.uuid",
`(select count(qa.id)
from question_answers qa
where qa.question_id = questions.id) "answer_count")`).
Where("tenant_id = ?", tenantID).Order("sequence ASC").Eager().All(questions)
Когда я выполняю этот запрос, у моего объекта вопроса поля верхнего уровня заполнены правильно, но он не заполняет свойство среза AnswerOptions.
Нужно ли мне выбирать все поля из question_answer_options
таблицы? Если да, то как мне создать псевдоним для выбранных столбцов, чтобы ГоБуффало знал, как заполнять объекты? Например, оба Question
и QuestionAnswerOption
имеют свойство/поле идентификатора.