Parece que você vai querer fazer duas coisas com o que você tem:(1) atualizar o modelo para que você tenha o relacionamento correto e (2) usar o
.Preload() se você estiver tentando fazer com que ele associe os dados na leitura. Mudanças de modelo
Gorm automaticamente infere relacionamentos com base no nome dos atributos em seu struct e no nome do struct referenciado. O problema é que o
Google atributo do tipo GoogleAccount não está associando porque o gorm está procurando por um type Google struct . Também está faltando uma chave estrangeira na
GoogleAccount . Como o ORM saberia qual GoogleAccount associar a qual Client ? Você deve adicionar um ClientId para sua GoogleAccount definição de estrutura. Além disso, eu mudaria as chaves primárias que você está usando para digitar
uint já que é isso que o gorm assume (a menos que você tenha uma boa razão para não usá-lo) Se eu fosse você, mudaria minhas definições de struct para o seguinte:
type Client struct {
IdClient uint `gorm:"primary_key"`
Name string
PhotoUrl string
ApprovalNumber uint16
Phone string
Password string
HoursOfNotice int8
GoogleAccount GoogleAccount // Change this to `GoogleAccount`, the same name of your struct
}
type GoogleAccount struct {
Id uint
ClientId uint // Foreign key
Token string
}
Para obter mais informações sobre isso, dê uma olhada na documentação das associações aqui:https://gorm. io/associations.html#has-one
Pré-carregando associações
Agora que você realmente os relaciona corretamente, você pode
.Preload() obtenha o objeto aninhado que você deseja:db.Preload("GoogleAccount").First(&user)
Usando
.Preload() preencherá a user.GoogleAccount atributo com a GoogleAccount associada corretamente com base no ClientId . Para obter mais informações sobre isso, dê uma olhada na documentação de pré-carregamento:https://gorm .io/crud.html#preloading-eager-loading