Wie speichere ich eingebettete Strukturen mit GORM?

DDD
Freigeben: 2024-11-04 03:09:01
Original
892 Leute haben es durchsucht

How to Store Embedded Structs with GORM?

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
}
Nach dem Login kopieren

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"`
}
Nach dem Login kopieren

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"`
}
Nach dem Login kopieren

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!

Quelle:php.cn
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage