Maison  >  Questions et réponses  >  le corps du texte

Méthode GoLang pour charger des objets imbriqués à l'aide de GORM

Bonjour, disons que j'ai 3 structures au format suivant

type Employee struct {
  Id int
  Name string
  CompanyId int `gorm:"column:companyId"`
  Company Company `gorm:"foreignKey:CompanyId"`
}

type Company struct {
  Id int
  CompanyName string
  OwnerId `gorm:"column:owner"`
  Owner Owner `gorm:"foreignKey:OwnerId"`
}

type Owner struct {
  Id int
  Name string
  Age int
  Email string
}

func (E Employee) GetAllEmployees() ([]Employee, error) {
  Employees := []Employee
  db.Preload("Company").Find(&Employees)
}

// -- -- There response will be like

[
  {
    id: 1
    name: "codernadir"
    company: {
      id: 5
      company_name: "Company"
      owner: {
        id 0
        Name ""
        Age 0
        Email ""
      }
    }
  }
]

Ici, j'ai la valeur du propriétaire avec la valeur par défaut. L'exemple donné est utilisé pour décrire ce que je veux réaliser.

J'ai besoin d'un moyen de charger la structure du propriétaire et sa valeur lors du chargement des employés ?

Toutes suggestions seraient grandement appréciées et merci d'avance

P粉448346289P粉448346289206 Il y a quelques jours460

répondre à tous(2)je répondrai

  • P粉642920522

    P粉6429205222024-03-28 11:06:30

    Vous pouvez utiliser la balise gorm:"embedded" :

    type Employee struct {
      Id int
      Name string
      CompanyId int `gorm:"column:companyId"`
      Company Company `gorm:"embedded"`
    }
    
    type Company struct {
      Id int
      CompanyName string
      OwnerId `gorm:"column:owner"`
      Owner Owner `gorm:"embedded"`
    }
    
    type Owner struct {
      Id int
      Name string
      Age int
      Email string
    }

    répondre
    0
  • P粉148782096

    P粉1487820962024-03-28 00:24:16

    C'est la solution que j'ai trouvée pour charger des objets imbriqués à partir de structures intégrées

    db.Preload("Company").Preload("Company.Owner").Find(&Employees)
    

    répondre
    0
  • Annulerrépondre