GORM以一对一的关系从两个表中获取数据

sg3maiej  于 2023-09-28  发布在  Go
关注(0)|答案(2)|浏览(148)

我的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,所以如果我不需要发出两个请求来获取Customer然后是Address,这将是非常实用的。
我在这里搜索,但找不到一个一对一关系的例子,有没有一种方法可以让这个查询不仅得到客户数据,而且还得到地址?

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

wkftcu5l1#

当您使用Preload函数时,您向它传递要为其加载数据的字段的名称。
在你的例子中,它应该看起来像这样(因为你在Customer结构体中的字段名为Address):

u.db.Preload("Address").Find(&customers)

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

qjp7pelc

qjp7pelc2#

我有这些two entitiesUserAccount带有一个ID字段作为主键,UserLoginData带有一个userId外键。我想要query UserLoginData by email并检索UserAccount的所有值以及相应的userId。我已经做了如下所示。虽然我可以从UserAccount中获取字段,但不能访问一些信息,如UserAccountfirstNameuserName

// 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)

相关问题