2015-12-25 1 views
0

En utilisant go 1.5 et gorm. Supposons que je souhaite créer une table events dotée de colonnes created_by_id et updated_by_id.Incorporation de structures de modèle avec les mêmes noms d'attribut dans golang

J'écris mes modèles comme

type By struct { 
    ByID sql.NullInt64 
    By *User 
} 

type CreatedBy struct { 
    By 
} 

type UpdatedBy struct { 
    By 
} 

type Event struct { 
    CreatedBy 
    UpdatedBy 
} 

Lorsque je tente de sauver un objet event, la valeur de la colonne by_id va essayer d'être sauvé plutôt que les valeurs de created_by_id et updated_by_id. Que dois-je faire pour m'assurer que les noms de colonnes de l'attribut ByID sont différents pour CreatedBy et UpdatedBy?

+0

Salut .. Je ne sais pas comprendre le problème. Pouvez-vous ajouter quelques informations supplémentaires? –

Répondre

0

Le problème est que vous intégrez à la fois CreatedBy et UpdatedBy dans Event, afin que les appels à Event.By sont ambigus et non autorisés (vous devriez être en mesure de préciser Event.CreatedBy.By et Event.UpdatedBy.By explicitement les deux champs désambiguïser).

La solution, le plus probable, serait de pas les types intégrer, mais réellement créer un struct avec des champs explicites:

type Event struct { 
    CreatedBy CreatedBy 
    UpdatedBy UpdatedBy 
} 

gorm devrait maintenant savoir comment les deux colonnes lever l'ambiguïté.

Bien sûr, si vous allez seulement d'intégrer By dans CreatedBy et UpdatedBy aux fins de la cartographie de la colonne, alors vous ne devriez pas avoir à déclarer de nouvelles struct s:

type By struct { 
    ByID sql.NullInt64 
    By *User 
} 

type Event struct { 
    CreatedBy By 
    UpdatedBy By 
}