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
Patricia Arquetteoriginal
2024-11-03 06:08:02797parcourir

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>

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>

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!

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