Eingebettete Strukturen mit GORM speichern
Bei der Arbeit mit GORM und eingebetteten Strukturen ist es wichtig zu verstehen, wie GORM mit diesen Strukturen umgeht. Betrachten Sie beispielsweise die folgende Struktur:
type A struct { point GeoPoint } type GeoPoint struct { Lat float64 Lon float64 }
Standardmäßig versucht GORM, eine separate Tabelle für die eingebettete Struktur (GeoPoint) zu erstellen, was möglicherweise nicht wünschenswert ist. Um die Struktur als Feld in derselben Tabelle einzubetten, müssen wir GORM mithilfe des Spalten-Tags manuell anweisen.
Lösung:
Um eine eingebettete Struktur als eine andere zu speichern Fügen Sie im Feld „gorm:“column:…“ das Tag „gorm:“column:…“ zum eingebetteten Strukturfeld hinzu. Zum Beispiel:
type A struct { GORMModel Point GeoPoint `gorm:"embedded;column:point"` }
Durch Festlegen der eingebetteten Option erkennt GORM die eingebettete Struktur und erstellt ein neues Feld mit dem Namen point in der A-Tabelle. Mit der Spaltenoption können wir einen benutzerdefinierten Namen für das Feld angeben.
Alternative Lösung für JSON-Marshalling/Unmarshalling:
Diese modifizierte Lösung ermöglicht das automatische Marshalling/Unmarshalling eines eingebettete Struktur als JSON-Spalte.
type Child struct { Lat float64 Lng float64 } type ChildArray []Child func (sla *ChildArray) Scan(src interface{}) error { return json.Unmarshal(src.([]byte), &sla) } func (sla ChildArray) Value() (driver.Value, error) { val, err := json.Marshal(sla) return string(val), err } type Parent struct { GORMModel Childrens ChildArray `gorm:"column:childrens;type:longtext"` }
Dieser Ansatz speichert das Childrens-Array als JSON-codierte Zeichenfolge in der Childrens-Spalte. Beim Abrufen der Daten entmarshmiert GORM die JSON-Zeichenfolge automatisch zurück in das Childrens-Array.
Das obige ist der detaillierte Inhalt vonWie speichere ich eingebettete Strukturen mit GORM?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!