Запрос с ассоциацией «имеет один» (один-к-одному) - PullRequest
1 голос
/ 06 марта 2019

Я немного играю с Гормом, пытаясь решить, какая библиотека ORM лучше всего подходит для моих нужд.

Важно отметить, что в настоящее время я работаю со 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, и кажется, ничего не работает и (я избегаю использовать соединение по назначению). Конечным результатом является то, что он запрашивает моего пользователя, но без цвета (только с идентификатором в моем colorRefer)

есть предложения?

1 Ответ

1 голос
/ 06 марта 2019

Вы хотите предварительно загрузить структуру Color?Если да, то вы пытались запросить это так

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