Einbetten von Strukturen in GORM zur Datenspeicherung
In GORM kann der Umgang mit eingebetteten Strukturen eine Herausforderung sein, wenn Sie die verschachtelte Struktur darin speichern möchten die gleiche Tabelle wie die übergeordnete Struktur. Standardmäßig geht GORM von eingebetteten Strukturen als separate Einheiten aus und versucht, eine neue Tabelle für sie zu erstellen. Möglicherweise ziehen Sie es jedoch vor, die eingebettete Struktur als zusätzliches Feld in die Tabelle der übergeordneten Struktur aufzunehmen.
Lösung
Eine effektive Lösung besteht in der Implementierung von Scan() und Value ()-Methoden für einen benutzerdefinierten Typ, der das eingebettete Strukturarray darstellt. Mit diesen Methoden kann GORM die eingebettete Struktur in und aus JSON serialisieren und deserialisieren und so ein nahtloses Speichern und Abrufen ermöglichen.
Betrachten Sie zur Veranschaulichung das folgende Beispiel:
<code class="go">type Child struct { Lat float64 Lng float64 } type ChildArray []Children 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 }</code>
Hier das benutzerdefinierte ChildArray Typ stellt das eingebettete Array von untergeordneten Strukturen dar. Es implementiert die Methoden Scan() und Value(), um die JSON-Serialisierung und -Deserialisierung zu handhaben.
Um das ChildArray in die Parent-Struktur einzubetten und zu speichern, können Sie das Modell wie folgt definieren:
<code class="go">type Parent struct { *gorm.Model Childrens ChildArray `gorm:"column:childrens;type:longtext"` }</code>
Mit dieser Konfiguration erkennt GORM das Feld „Childrens“ als benutzerdefinierten Typ und serialisiert und deserialisiert die eingebetteten Child-Strukturen automatisch in und von JSON, wenn es mit der Datenbank interagiert.
Das obige ist der detaillierte Inhalt vonWie speichere ich eingebettete Strukturen in GORM in derselben Tabelle wie die übergeordnete Struktur?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!