Heim  >  Artikel  >  Backend-Entwicklung  >  Wie speichere ich eingebettete Strukturen in GORM als einzelne Entität?

Wie speichere ich eingebettete Strukturen in GORM als einzelne Entität?

Susan Sarandon
Susan SarandonOriginal
2024-11-02 22:04:30861Durchsuche

How to Store Embedded Structs in GORM as a Single Entity?

Integration eingebetteter Strukturen in GORM

Das Speichern eingebetteter Strukturen mit GORM stellt eine Herausforderung dar, wenn es um Typen geht wie:

<code class="go">type A struct {
    point GeoPoint
}

type GeoPoint struct {
    Lat float64
    Lon float64
}</code>

Standardmäßig ist GORM versucht, eine separate Tabelle für die eingebettete Struktur GeoPoint zu erstellen. Um es jedoch als Feld innerhalb der übergeordneten Struktur A hinzuzufügen, sollten Sie die folgende Lösung in Betracht ziehen, die von den Erkenntnissen von Chris inspiriert ist:

<code class="go">import (
    "encoding/json"

    "gorm.io/gorm"
)

// Define custom Scan and Value methods for ChildArray to enable automatic marshalling and unmarshalling.
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
}

// Define the parent struct with the embedded ChildArray.
type Parent struct {
    *gorm.Model
    Childrens ChildArray `gorm:"column:childrens;type:longtext"`
}</code>

Dieser Ansatz ermöglicht ein nahtloses Marshalling und Unmarshalling der eingebetteten Struktur innerhalb der übergeordneten Struktur , um sicherzustellen, dass es als einzelne Einheit in der Datenbank gespeichert und abgerufen wird.

Das obige ist der detaillierte Inhalt vonWie speichere ich eingebettete Strukturen in GORM als einzelne Entität?. 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