为了账号安全,请及时绑定邮箱和手机立即绑定

表引用一个表,而表又引用另一个表

表引用一个表,而表又引用另一个表

Go
九州编程 2022-08-01 18:44:59
我正在使用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;"`

}


查看完整回答
反对 回复 2022-08-01
  • 1 回答
  • 0 关注
  • 89 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信