Я хотел бы знать, можно ли предварительно загрузить данные с обеих сторон отношения. Рассмотрим этот пример:
type User struct {
gorm.Model
Name string
Documents []Document // has-many
}
type Document struct {
gorm.Model
UserID uint
Name string
DocumentFulltext DocumentFulltext // has-one
}
type DocumentFulltext struct {
gorm.Model
DocumentID uint
Name string
}
Благодаря этому я могу легко получить DocumentFulltext для любого данного документа, подобного этому
db.Where("id = ?", ID).Preload("DocumentFulltext").Find(&document)
Работает!
Но что, если у меня есть документ и хотите предварительно загрузить (или присоединиться) к пользователю, которому он принадлежит?
db.Where("id = ?", ID).Preload("User").Find(&document)
Это дает мне пани c. (invalid memory address
)
db.Where("id = ?", ID).Joins("User").Find(&document)
И это дает шаткий SQL как .... FROM "documents" User WHERE id = ...
Как это возможно? Нужно ли мне использовать «ручные» запросы?
-
Если это невозможно: что является передовой практикой / руководством по моделированию моих отношений, чтобы я мог использовать встроенный GORM ins, как .Preload () эффективно?
Например, если я установлю отношения между пользователями и документами следующим образом:
type User struct {
gorm.Model
Name string
}
type Document struct {
gorm.Model
User User // belongs-to
UserID uint
Name string
DocumentFulltext DocumentFulltext // has-one
}
type DocumentFulltext struct {
gorm.Model
DocumentID uint
Name string
}
, тогда я могу предварительно загрузить оба, DocumentFulltext и User, для любого данного документа . Но я теряю возможность предварительно загружать документы и полные тексты, если я хочу сделать это для данного пользователя.
-
Любые подсказки приветствуются. Спасибо!