英文:
GORM get data from both tables on a one to one relationship
问题
我在我的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("Address").Find(&customers)
return customers, nil
}
以上代码中的Preload("Address")
可以用来预加载关联的地址数据。这样,当你查询顾客数据时,地址数据也会被同时获取到。
英文:
I have this two structs on my Go app
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"`
}
I'm using Angular at my front-end, so it would be very practical if I don't have to make two requests to get the Customer then the Address.
I searched in here but couldn't find an example for a one to one relationship, is there a way to make this query get not only the customer data, but also the address?
func (u customer) GetCustomers(params string) ([]models.Customer, error) {
customers := []models.Customer{}
u.db.Preload("Addresses").Find(&customers)
return customers, nil
}
答案1
得分: 1
当你使用Preload
函数时,你需要传递要加载数据的字段的名称。
在你的情况下,应该像这样写(因为你在Customer
结构体中的字段名为Address
):
u.db.Preload("Address").Find(&customers)
你可以查看文档获取更多详细信息。
英文:
When you use the Preload
function, you pass it the name of the field you want to load the data for.
In your case, it should look like this (because your field in the Customer
struct is named Address
):
u.db.Preload("Address").Find(&customers)
You can check out the documentation for more details.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论