我正在尝试使用Gorm ORM for 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
// ...
}
我从many-to-many example shown here in the documentation中得到了启发(除了我使用了一部分用户[]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
条件可以防止返回任何地址。
任何人都可以阐明我如何使用Gorm的db.Model
方法包括地址吗?