2017-01-03 1 views
1

J'ai une petite erreur dans ma petite application et je ne vois vraiment pas d'où il vient. J'ai donc 4 structs, l'un des 4 struct a plusieurs relations one-to-one.Golang Gorm erreur struct migration

Je me connecte à ma base de données et utilise automigrate pour migrer mes 4 structures et créer les tables nécessaires. Le problème est à ce stade, il ne crée rien dans la base de données et dans le terminal je ce message: (erreur 1060: Nom du champ « id » déjà utilisé)

Mon code principal .Allez

package main 

import (
"fmt" 
"github.com/jinzhu/gorm" 
_ "github.com/jinzhu/gorm/dialects/mysql" 
) 

var db *gorm.DB 
var err error 

const (
mysupersecretpassword = "cr9ih_pvr9f9kc75n#bz&y%(@+^&1_#hr0^)-$kv%n3dh84$^w" 
) 

func main() { 

db, err = gorm.Open("mysql", "root:[email protected]/test?charset=utf8&parseTime=True") 
if err != nil { 
    fmt.Println(err) 
} 
defer db.Close() 
db.AutoMigrate(&User{}, &Ads{}, &Type{}, &Category{}, &Location{}) 

} 

models.go

package main 

import (
    "github.com/jinzhu/gorm" 
) 

type User struct { 
    gorm.Model 
    Username string `json:"username"` 
    Email string `json:"email" form:"email"` 
    Password string `json:"password" form:"password"` 
    active bool `json:"active" gorm:"default:0"` 
    level bool `json:"level" gorm:"default:0"` 
} 

type Type struct { 
    gorm.Model 
    Name string `json:"name" form:"name"` 
} 

type Category struct { 
    gorm.Model 
    CatID uint `json:"category-parent" form:"category-parent" gorm:"default:0"` 
    Name string `json:"name" form:"name"` 
} 

type Location struct { 
    gorm.Model 
    Location string `json:"location" form:"location"` 
} 

type Ads struct { 
    gorm.Model 
    User  User  `json:"user"` 
    Type  Type  `json:"type" form:"type"` 
    Category Category `json:"category" form:"category"` 
    Title string `json:"title" form:"title"` 
    Content string `json:"content" form:"content"` 
    Location Location `json:"location" form:"location"` 
} 

en attendant une réponse qui pourrait me mettre sur la droit chemin :)

Répondre

1

AutoMigrate créera SEULEMENT des tables, des colonnes manquantes et des index manquants, et NE changera PAS le type de la colonne existante ou ne supprimera pas les colonnes inutilisées pour protéger vos données.

Je suppose que l'une de vos tables existe déjà, et la colonne id dans ce tableau est un type différent de ce que gorm.Model veut créer. Je voudrais savoir quelle table il est en faisant:

db.AutoMigrate(&User{}) 
db.AutoMigrate(&Ads{}) 
db.AutoMigrate(&Type{}) 
db.AutoMigrate(&Category{}) 
db.AutoMigrate(&Location{}) 

et voir où il échoue. Ensuite, je voudrais sauvegarder cette table (juste au cas où), puis soit abandonner complètement la table, ou renommer la colonne id à tmp_id, voir si automigrate le corrige, et si c'est le cas, déposez la colonne tmp_id.