Heim  >  Artikel  >  Backend-Entwicklung  >  Wie speichere ich eingebettete Strukturen in GORM in derselben Tabelle wie die übergeordnete Struktur?

Wie speichere ich eingebettete Strukturen in GORM in derselben Tabelle wie die übergeordnete Struktur?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-03 06:08:02718Durchsuche

How to Store Embedded Structs in GORM within the Same Table as the Parent Struct?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn