我正在使用gorm,并且我有这个结构,其中表包含一个外键引用,然后引用。UserAddressCountry 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. } }我确实为我创建了重新填充和记录的函数,类似于以下内容:AddressCountryfunc PopulateUser(user) User { addr = FindAddresByID(user.ID) cntr = FindCountryByCode(addr.Code) addr.Country = cntr user.Address = addr return user}但我的问题:有没有一个函数可以在不创建函数的情况下为我做到这一点?Gorm在这种情况下,协会可以提供帮助吗?如果我希望在用户删除时删除地址,我该如何执行此操作?Gorm我试图自己找到答案,但文档有点乱。
1 回答
守候你守候我
TA贡献1802条经验 获得超10个赞
文档显示了要转到结构引用的外键标记。即,在您的情况下,这些应该在地址和国家/地区,而不是地址ID和国家/地区代码。像这样:
type User struct {
Address Address `gorm:"foreignKey:AddressID;references:ID"`
AddressID int `gorm:"column:address_id"`
}
type Address struct {
CountryCode int `gorm:"column:country_code"`
Country Country gorm:"foreignKey:CountryCode; references:Code"`
}
请尝试使用这些。
为
请在此处查看急切加载
db.Preload("User").Preload("Address").Find(&users)
您可以在列上使用级联标记。
type User struct {
gorm.Model
Name string
CompanyID int
Company Company `gorm:"constraint:OnUpdate:CASCADE,OnDelete:SET NULL;"`
}
- 1 回答
- 0 关注
- 89 浏览
添加回答
举报
0/150
提交
取消