登录
首页 >  Golang >  Go问答

GORM 从两个表中检索一对一关联的数据

来源:stackoverflow

时间:2024-02-13 12:48:23 326浏览 收藏

最近发现不少小伙伴都对Golang很感兴趣,所以今天继续给大家介绍Golang相关的知识,本文《GORM 从两个表中检索一对一关联的数据》主要内容涉及到等等知识点,希望能帮到你!当然如果阅读本文时存在不同想法,可以在评论中表达,但是请勿使用过激的措辞~

问题内容

我的 go 应用程序上有这两个结构

type customer struct {
    id             uint       `json: "id" gorm:"primary_key"`
    name           string     `json: "name"`
    addressid      int        `json: "addressid"`
    address        address    `json: "address"`
}

type address struct {
    id        uint   `json: "id" gorm:"primary_key"`
    zipcode   string `json: "zipcode"`
    streetone string `json: "streetone"`
    streettwo string `json: "streettwo"`
    city      string `json: "city"`
    state     string `json: "state"`
    number    string `json: "number"`
}

我在前端使用 angular,因此如果我不必发出两个请求来获取客户然后获取地址,这将非常实用。

我在这里搜索,但找不到一对一关系的示例,有没有办法让此查询不仅获取客户数据,还获取地址?

func (u customer) GetCustomers(params string) ([]models.Customer, error) {
    customers := []models.Customer{}
    u.db.Preload("Addresses").Find(&customers)
    return customers, nil
}

正确答案


当您使用 preload 函数时,您可以将要为其加载数据的字段的名称传递给它。

在您的情况下,它应该如下所示(因为 customer 结构中的字段名为 address):

u.db.preload("address").find(&customers)

您可以查看 documentation 了解更多详细信息。

我有 两个实体 useraccount(以 id 字段为主键)和 userlogindata(以 userid 外键)。我想通过电子邮件 query userlogindata 并检索 useraccount 与相应的 userid 的所有值。我已经做到了,如下所示。虽然我可以从 useraccount 获取字段,但我无法访问 useraccount 的一些信息,例如 firstnameusername

// entities

type UserAccount struct {
    gorm.Model
    FirstName   string
    LastName    string
    UserName    string
    Gender      string
    Avatar      string
    DateOfBirth string
}

type UserLoginData struct {
    gorm.Model
    UserID                uint
    UserAccount           UserAccount `gorm:"foreignKey:UserID"`
    PasswordHash          string
}


// in repository
var user entity.UserLoginData
r.db.Preload("UserAccount").Where("email = ?", email).First(&user)

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《GORM 从两个表中检索一对一关联的数据》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>