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
Libérer: 2024-11-02 22:04:30
original
905 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal