Heim Backend-Entwicklung Golang 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?

Nov 03, 2024 am 06:08 AM

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:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

<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), &amp;sla)

}

 

func (sla ChildArray) Value() (driver.Value, error) {

    val, err := json.Marshal(sla)

    return string(val), err

}</code>

Nach dem Login kopieren

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:

1

2

3

4

<code class="go">type Parent struct {

    *gorm.Model

    Childrens ChildArray `gorm:"column:childrens;type:longtext"`

}</code>

Nach dem Login kopieren

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!

Erklärung dieser Website
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

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

GO Language Pack Import: Was ist der Unterschied zwischen Unterstrich und ohne Unterstrich? GO Language Pack Import: Was ist der Unterschied zwischen Unterstrich und ohne Unterstrich? Mar 03, 2025 pm 05:17 PM

GO Language Pack Import: Was ist der Unterschied zwischen Unterstrich und ohne Unterstrich?

Wie kann ich kurzfristige Informationsübertragung zwischen Seiten im BeEGO-Framework implementieren? Wie kann ich kurzfristige Informationsübertragung zwischen Seiten im BeEGO-Framework implementieren? Mar 03, 2025 pm 05:22 PM

Wie kann ich kurzfristige Informationsübertragung zwischen Seiten im BeEGO-Framework implementieren?

Wie schreibe ich Scheinobjekte und Stubs zum Testen in Go? Wie schreibe ich Scheinobjekte und Stubs zum Testen in Go? Mar 10, 2025 pm 05:38 PM

Wie schreibe ich Scheinobjekte und Stubs zum Testen in Go?

Wie konvertieren Sie die Liste der MySQL -Abfrageergebnisse in eine benutzerdefinierte Struktur -Slice in Go -Sprache? Wie konvertieren Sie die Liste der MySQL -Abfrageergebnisse in eine benutzerdefinierte Struktur -Slice in Go -Sprache? Mar 03, 2025 pm 05:18 PM

Wie konvertieren Sie die Liste der MySQL -Abfrageergebnisse in eine benutzerdefinierte Struktur -Slice in Go -Sprache?

Wie kann ich benutzerdefinierte Typ -Einschränkungen für Generika in Go definieren? Wie kann ich benutzerdefinierte Typ -Einschränkungen für Generika in Go definieren? Mar 10, 2025 pm 03:20 PM

Wie kann ich benutzerdefinierte Typ -Einschränkungen für Generika in Go definieren?

Wie kann ich Tracing -Tools verwenden, um den Ausführungsfluss meiner GO -Anwendungen zu verstehen? Wie kann ich Tracing -Tools verwenden, um den Ausführungsfluss meiner GO -Anwendungen zu verstehen? Mar 10, 2025 pm 05:36 PM

Wie kann ich Tracing -Tools verwenden, um den Ausführungsfluss meiner GO -Anwendungen zu verstehen?

Wie schreibt man Unit -Tests in Go? Wie schreibt man Unit -Tests in Go? Mar 21, 2025 pm 06:34 PM

Wie schreibt man Unit -Tests in Go?

Wie schreibe ich Dateien in Go Language bequem? Wie schreibe ich Dateien in Go Language bequem? Mar 03, 2025 pm 05:15 PM

Wie schreibe ich Dateien in Go Language bequem?

See all articles