Maison >développement back-end >Golang >Comment stocker des structures intégrées dans GORM en tant qu'entité unique ?

Comment stocker des structures intégrées dans GORM en tant qu'entité unique ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-02 22:04:30964parcourir

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

Incorporation de structures intégrées dans GORM

Le stockage de structures intégrées avec GORM pose un défi lorsqu'il s'agit de types tels que :

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

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

Par défaut, GORM tente de créer une table distincte pour la structure intégrée GeoPoint. Cependant, pour l'ajouter en tant que champ dans la structure parent A, envisagez la solution suivante inspirée des idées de Chris :

<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>

Cette approche permet un marshalling et un démarshalling transparents de la structure intégrée dans la structure parent. , en garantissant qu'il est stocké et récupéré de la base de données en tant qu'entité unique.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn