Es sieht so aus, als würden Sie mit dem, was Sie haben, zwei Dinge tun wollen:(1) Aktualisieren Sie das Modell, damit Sie die richtige Beziehungsbindung haben, und (2) verwenden Sie .Preload()
-Methode, wenn Sie versuchen, sie dazu zu bringen, die Daten beim Lesen zuzuordnen.
Modelländerungen
Gorm leitet automatisch Beziehungen basierend auf dem Namen der Attribute in Ihrer Struktur und dem Namen der referenzierten Struktur ab. Das Problem ist, dass Google
Attribut vom Typ GoogleAccount
verbindet nicht, weil gorm nach einer type Google struct
sucht .
Ihnen fehlt auch ein Fremdschlüssel für GoogleAccount
. Wie würde das ORM wissen, welches GoogleAccount
mit welchem Client
verknüpft werden soll ? Sie sollten eine ClientId
hinzufügen zu Ihrem GoogleAccount
Strukturdefinition.
Außerdem würde ich die Primärschlüssel ändern, die Sie verwenden, um uint
einzugeben denn das ist die Standardeinstellung von gorm (es sei denn, Sie haben einen guten Grund, es nicht zu verwenden)
Wenn ich Sie wäre, würde ich meine Strukturdefinitionen wie folgt ändern:
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
}
Weitere Informationen hierzu finden Sie in der Association-Dokumentation hier:http://gorm. io/associations.html#has-one
Verknüpfungen werden vorab geladen
Jetzt, da Sie sie richtig verknüpft haben, können Sie .Preload()
Holen Sie sich das gewünschte verschachtelte Objekt:
db.Preload("GoogleAccount").First(&user)
Verwenden von .Preload()
wird das user.GoogleAccount
auffüllen -Attribut mit dem korrekt verknüpften GoogleAccount
basierend auf der ClientId
.
Weitere Informationen hierzu finden Sie in der Preloading-Dokumentation:http://gorm .io/crud.html#preloading-eager-loading