Je construis un backend Golang en utilisant jinzhu/gorm et j'ai quelques problèmes en essayant d'établir une relation entre deux tables, par exemple. Articles et Les fabricants utilisant une clé étrangère. Je suis les étapes au jinzhu.me/gorm/models mais je me suis honnêtement trouvé déconcerté venant d'une approche plus directe d'écrire manuellement des tables etc., par exemple, en utilisant go pq.Impossible de définir la clé étrangère en utilisant gorm Postgresql
item.go:
package model
import "github.com/jinzhu/gorm"
type Item struct {
gorm.Model
Item string `gorm:"primary_key"`
Manufacturer Manufacturer `gorm:"ForeignKey:Name"`
}
manufacturer.go:
package model
import "github.com/jinzhu/gorm"
type Manufacturer struct {
gorm.Model
Name string `gorm:"primary_key"`
}
Je reçois aucune erreur ni avertissement. Inspecter mes tables, j'ai remarqué qu'aucune corrélation n'a été créée. L'article n'a pas de champ Fabricant.
Ce que j'essayé jusqu'à présent:
- ne pas écrire explicitement
gorm:"ForeignKey:Name"
depuisManufacturer
domaine est déjà unManufacturer
- écriture
gorm:"ForeignKey:Name;AssociationForeignKey:Name"
- les associer manuellement avec
db.Model(&model.Item{}).Related(&model.Manufacturer{})
- les associer manuellement avec
db.Model(&model.Item{}).Related(&model.Manufacturer{}, "Manufacturer")
- Les associer manuellement à
db.Model("items").Related("manufacturers")
. Ils sont créés avec ce nom sur Postgresql même si le nom de leur modèle est singulier.
EDIT:
Essayer quelque chose comme
type Item struct {
Item string `gorm:"primary_key"`
Manufacturer Manufacturer
ManufacturerID int
}
type Manufacturer struct {
ID uint
Name string
}
mène au même résultat. Aucune clé étrangère n'est créée et je suis en mesure d'insérer de nouveaux éléments avec un Manufacturer
inexistant.
Qu'est-ce que je fais mal? Est-ce que je manque quelque chose?
Il ne fonctionne pas. 'ManufacturerName' est créé mais ce n'est pas une clé étrangère. Si vous insérez un nouvel élément avec 'ManufacturerName = 'test'' et' Manufacturer' n'a aucune entrée pour 'test', il ne génère aucune erreur. En outre, en utilisant PGAdmin, il semble ne pas créer de contrainte de clé étrangère. De toute façon, vous devriez éditer votre réponse fixant * foriegn * à * foreign *. – AndreaM16
Il semble que gorm ait quelques problèmes avec la création de la clé étrangère (par https: // github.com/jinzhu/gorm/issues/23), mais il semble que vous pouvez utiliser les balises 'sql' pour créer la clé actuelle - vous devez juste faire attention à l'ordre que vous automatisez afin que la table qu'il référence existe déjà. – dave