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
DDDoriginal
2024-11-04 03:09:01905parcourir

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
}

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"`
}

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"`
}

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!

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