Maison > développement back-end > Golang > Comment stocker des structures intégrées avec GORM ?

Comment stocker des structures intégrées avec GORM ?

DDD
Libérer: 2024-11-04 03:09:01
original
932 Les gens l'ont consulté

How to Store Embedded Structs with GORM?

Stockage de structures intégrées avec GORM

Lorsque vous travaillez avec GORM et des structures intégrées, il est essentiel de comprendre comment GORM gère ces structures. Par exemple, considérons la structure suivante :

type A struct {
    point GeoPoint
}

type GeoPoint struct {
    Lat float64
    Lon float64
}
Copier après la connexion

Par défaut, GORM tente de créer une table distincte pour la structure intégrée (GeoPoint), ce qui n'est peut-être pas souhaitable. Pour intégrer la structure en tant que champ dans la même table, nous devons instruire manuellement GORM à l'aide de la balise column.

Solution :

Pour stocker une structure intégrée comme une autre champ, ajoutez la balise gorm:"column:..." au champ de structure intégré. Par exemple :

type A struct {
    GORMModel
    Point GeoPoint `gorm:"embedded;column:point"`
}
Copier après la connexion

En définissant l'option intégrée, GORM reconnaît la structure intégrée et crée un nouveau champ nommé point dans la table A. L'option de colonne nous permet de spécifier un nom personnalisé pour le champ.

Solution alternative pour le marshalling/unmarshalling JSON :

Cette solution modifiée permet le marshalling/unmarshalling automatique d'un structure intégrée en tant que colonne JSON.

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

Cette approche stocke le tableau Childrens sous forme de chaîne codée en JSON dans la colonne Childrens. Lors de la récupération des données, GORM désorganise automatiquement la chaîne JSON dans le tableau Childrens.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal