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:http://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:http://gorm .io/crud.html#preloading-eager-loading