Le stockage de structures intégrées avec GORM pose un défi lorsqu'il s'agit de types tels que :
<code class="go">type A struct { point GeoPoint } type GeoPoint struct { Lat float64 Lon float64 }</code>
Par défaut, GORM tente de créer une table distincte pour la structure intégrée GeoPoint. Cependant, pour l'ajouter en tant que champ dans la structure parent A, envisagez la solution suivante inspirée des idées de Chris :
<code class="go">import ( "encoding/json" "gorm.io/gorm" ) // Define custom Scan and Value methods for ChildArray to enable automatic marshalling and unmarshalling. 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 } // Define the parent struct with the embedded ChildArray. type Parent struct { *gorm.Model Childrens ChildArray `gorm:"column:childrens;type:longtext"` }</code>
Cette approche permet un marshalling et un démarshalling transparents de la structure intégrée dans la structure parent. , en garantissant qu'il est stocké et récupéré de la base de données en tant qu'entité unique.
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!