【发布时间】:2021-05-01 17:15:08
【问题描述】:
我正在使用 gorm,并且我有这个结构,其中 User 表包含一个引用 Address 的外键,然后引用 Country。
type User struct {
ID int `gorm:"column:id; primaryKey; autoIncrement" json:"id"`
Address Address
AddressID int `gorm:"column:address_id;foreignKey:AddressID;references:ID" json:"address"`
}
type Address struct {
ID int `gorm:"column:ID;primaryKey;autoIncrement;" json:"id"`
CountryCode int `gorm:"column:country_code; foreignKey:CountryCode; references:Code" json:"country_code"`
Country Country
}
type Country struct {
Code int `gorm:"column:code; primaryKey; autoIncrement" json:"code"`
Name string `gorm:"column:name" json:"name"`
ContinentName string `gorm:"column:continent_name" json:"continentName"`
}
照片中解释的关系:
现在,当我使用以下方式返回用户时:
db.Model(&user).Where().First() // or Find()
我得到地址,国家空,像这样:
{
ID: 1,
AddressID: 2,
Address: {
// empty address.
}
}
我确实为我创建了重新填充Address 和Country 记录的函数,类似于:
func PopulateUser(user) User {
addr = FindAddresByID(user.ID)
cntr = FindCountryByCode(addr.Code)
addr.Country = cntr
user.Address = addr
return user
}
但我的问题:
-
Gorm中是否有一个函数可以在我不创建函数的情况下为我执行此操作? - 在这种情况下,关联可以提供帮助吗?
- 如果我想在用户删除时删除地址,我如何在
Gorm中做到这一点?
我试图自己寻找答案,但文档有点乱。
【问题讨论】: