Persistance du type de données d'ensemble personnalisé à l'aide de GORM Golang
Lors de l'utilisation d'un type de données d'ensemble personnalisé pour définir des relations un-à-plusieurs dans GORM, vous pouvez rencontrer une erreur car il s'agit d'un type SQL non valide. Pour surmonter ce problème, vous devez implémenter les interfaces Scanner et Driver Valuer pour votre type personnalisé. Cela permettra au pilote de la base de données de comprendre comment stocker et récupérer les données dans la base de données.
Interface du scanner
L'interface du scanner a la méthode suivante :
func (data *CustomType) Scan(value interface{}) error
Cette méthode est utilisée pour analyser la valeur de la base de données dans votre type personnalisé. Vous devez implémenter cette méthode pour convertir la valeur de la base de données en votre type personnalisé.
Interface Driver Valuer
L'interface Driver Valuer a la méthode suivante :
func (data *CustomType) Value() (driver.Value, error)
Cette méthode est utilisée pour convertir votre type personnalisé en une valeur de base de données. Vous devez implémenter cette méthode pour convertir votre type personnalisé dans un format que la base de données peut comprendre.
Exemple
Considérons un type personnalisé UserAccess, qui est une carte[ interface{}]struct{}.
type UserAccess map[interface{}]struct{} func (data *UserAccess) Value() (driver.Value, error) { return data.ConvertJSONToString(), nil } func (data *UserAccess) Scan(value interface{}) error { *data = data.ConvertStringToJson(valueString) }
Dans cet exemple, ConvertStringToJson et ConvertJSONToString sont des fonctions d'assistance qui convertissent entre UserAccess et un format compatible avec la base de données comme une chaîne JSON.
En implémentant ces interfaces, vous indiquez au pilote de base de données comment gérer votre type de données personnalisé, vous permettant ainsi de le conserver dans votre 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!