Я пытаюсь запросить отношение «многие ко многим», используя Gorm ORM для Go.
У меня есть две структуры: User
и Address
.
type User struct {
// gorm.Model
UUID string `gorm:"type:uuid;primary_key;auto_increment:false"`
Firstname string
// ...
Addresses []Address `gorm:"many2many:useraddresses"`
}
// Address represents the Postgres SQL address model
type Address struct {
UUID string `gorm:"type:uuid;primary_key;auto_increment:false"`
Line1 string
// ...
}
Я черпал вдохновение из пример "многие-ко-многим", показанный здесь в документации (за исключением того, что я использовал часть пользователей []User
вместо одного пользователя).
var u []User
var a []Address
Если я запрашиваю, просто используя пользователей в качестве модели, все пользователи возвращаются (отправляет sql-запрос SELECT * FROM "users"
):
db.Model(&u).Find(&u)
Однако, если я включу связанные Адреса, хирурги будут возвращены, но не Адреса:
db.Model(&u).Related(&a, "Addresses").Find(&u)
Это создает еще один запрос sql, который предшествует первому:
SELECT "addresses".*
FROM "addresses" INNER JOIN "useraddresses" ON "useraddresses"."address_uuid" = "addresses"."uuid"
WHERE (1 <> 1)
Конечно, условие where false
предотвращает возврат любых адресов.
Может ли кто-нибудь пролить свет на то, как я могу включить адреса с помощью метода Горма db.Model
?
Я пробовал Preload
и стараюсь избежать некоторых побочных эффектов. Есть ли другие способы запроса отношений «многие ко многим», например Related
?
Я думаю ты просто хочешь сделать
db.Preload("Addresses").Find(&u)