生成的条件为“ WHERE(1 <> 1)”的SQL查询

时间:2018-07-27 18:55:31

标签: postgresql go many-to-many go-gorm

我正在尝试使用Gorm ORM for Go查询多对多关系。

我有两个结构:UserAddress

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方法包括地址吗?

0 个答案:

没有答案