使用“具有一个”关联(一对一)进行查询

时间:2019-03-06 07:22:32

标签: go go-gorm

在尝试确定哪个ORM库最适合我的需求时,我正在与Gorm交流。

重要的是,我目前正在使用Sqlite。

根据指南,我创建了两个结构:

  type Color struct {
    gorm.Model
    UserID uint
    Name   string
}

//User struct define a basic user model
type User struct {
    gorm.Model
    Username     string
    Email        string
    FirstName    string
    LastName     string
    Password     string
    CreationDate time.Time
    DOB          time.Time
    IgnoreMe     int   `gorm:"-"` // Ignore this field
    Color        Color `gorm:"foreignkey:ColorRefer"`
    ColorRefer   uint
}

使用

创建数据库时
func CreateTables() {
user := dm.User{}
color := dm.Color{}
GormDB.CreateTable(&color)
GormDB.CreateTable(&user)
GormDB.Model(&user).AddForeignKey("ColorRefer", "colors(id)", "CASCADE", "CASCADE")

}

或:

func CreateTables() {
    GormDB.AutoMigrate(&dm.User{},&dm.Color{})
}

遗憾的是,它无法正常工作并自动创建外键,但是当我手动进行操作时,它就可以工作。

我的主要问题是当我尝试查询用户

//QueryByStructExample query users table by the struct non-zero (non-default) fields.
    func QueryByStructExample(userStruct dm.User) []dm.User {
        var results []dm.User
        GormDB.Where(userStruct).Find(&results)
        return results
    }

我创建了以下函数,以尝试通过电子邮件具有我的颜色结构的color属性来查询用户,并且尝试使用Model,Related和Association函数,似乎没有任何效果((我避免故意使用join))。 最终结果是它查询我的用户,但没有颜色(仅在我的colorRefer中具有ID)

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您是要预加载Color结构吗?如果是,您是否尝试过这样查询

GormDB.Preload('Color').Where(userStruct).Find(&results)