我正在尝试使用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
// ...
}
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 方法包含地址?