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

我正在使用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"`

   }


照片中解释的关系:

http://img3.mukewang.com/62e7aec10001dfad06570284.jpg

现在,当我使用以下命令返回用户时:


  db.Model(&user).Where().First()  // or Find()

我得到地址,和国家空,像这样:


   {

    ID: 1,

    AddressID: 2,

    Address: {

          // empty address.

      }


   }


我确实为我创建了重新填充和记录的函数,类似于以下内容:AddressCountry



func PopulateUser(user) User {


   addr = FindAddresByID(user.ID)

   cntr = FindCountryByCode(addr.Code)


   addr.Country = cntr

   user.Address = addr


   return user


}

但我的问题:

  1. 有没有一个函数可以在不创建函数的情况下为我做到这一点?Gorm

  2. 在这种情况下,协会可以提供帮助吗?

  3. 如果我希望在用户删除时删除地址,我该如何执行此操作?Gorm

我试图自己找到答案,但文档有点乱。


九州编程
浏览 90回答 1
1回答

守候你守候我

文档显示了要转到结构引用的外键标记。即,在您的情况下,这些应该在地址和国家/地区,而不是地址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;"`}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go