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!