Parece que querrá hacer dos cosas con lo que tiene:(1) actualizar el modelo para que tenga el enlace de relación correcto y (2) usar .Preload()
método si está tratando de hacer que asocie los datos en lectura.
Cambios de modelo
Gorm infiere automáticamente las relaciones en función del nombre de los atributos en su estructura y el nombre de la estructura a la que se hace referencia. El problema es que Google
atributo de tipo GoogleAccount
no se está asociando porque gorm está buscando una estructura de type Google struct
.
También te falta una clave externa en GoogleAccount
. ¿Cómo sabría el ORM qué GoogleAccount
asociar con qué Client
? Debe agregar un ClientId
a tu GoogleAccount
definición de estructura.
Además, cambiaría las claves principales que está utilizando para escribir uint
ya que ese es el valor predeterminado de gorm (a menos que tenga una buena razón para no usarlo)
Si yo fuera usted, cambiaría las definiciones de mi estructura a lo siguiente:
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 obtener más información al respecto, consulte la documentación de las asociaciones aquí:http://gorm. io/asociaciones.html#has-one
Asociaciones de precarga
Ahora que los tiene correctamente relacionados, puede .Preload()
obtenga el objeto anidado que desea:
db.Preload("GoogleAccount").First(&user)
Usando .Preload()
llenará el user.GoogleAccount
atributo con la GoogleAccount
asociada correctamente basado en el ClientId
.
Para obtener más información al respecto, consulte la documentación de precarga:http://gorm .io/crud.html#preloading-eager-loading