Maison > développement back-end > Golang > Comment stocker des structures intégrées dans GORM dans la même table que la structure parent ?

Comment stocker des structures intégrées dans GORM dans la même table que la structure parent ?

Patricia Arquette
Libérer: 2024-11-03 06:08:02
original
794 Les gens l'ont consulté

How to Store Embedded Structs in GORM within the Same Table as the Parent Struct?

Intégrer des structures dans GORM pour le stockage de données

Dans GORM, la gestion des structures intégrées peut être un défi lorsque vous souhaitez stocker la structure imbriquée dans la même table que la structure parent. Par défaut, GORM considère les structures intégrées comme des entités distinctes et tente de créer une nouvelle table pour elles. Cependant, vous préférerez peut-être inclure la structure intégrée en tant que champ supplémentaire dans la table de la structure parent.

Solution

Une solution efficace consiste à implémenter Scan() et Value () pour un type personnalisé qui représente le tableau de structures intégré. Ces méthodes permettent à GORM de sérialiser et de désérialiser la structure intégrée vers et depuis JSON, permettant ainsi un stockage et une récupération transparents.

À titre d'illustration, considérons l'exemple suivant :

<code class="go">type Child struct {
    Lat float64
    Lng float64
}

type ChildArray []Children

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

Ici, la personnalisation ChildArray type représente le tableau intégré de structures Child. Il implémente les méthodes Scan() et Value() pour gérer la sérialisation et la désérialisation JSON.

Pour intégrer et stocker le ChildArray dans la structure Parent, vous pouvez définir le modèle comme suit :

<code class="go">type Parent struct {
    *gorm.Model
    Childrens ChildArray `gorm:"column:childrens;type:longtext"`
}</code>
Copier après la connexion

Avec cette configuration, GORM reconnaît le champ Childrens comme un type personnalisé et sérialise et désérialise automatiquement les structures Child intégrées vers et depuis JSON lors de l'interaction avec la base de données.

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