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!