2017-01-03 9 views
1

小さなアプリケーションで小さな間違いがあり、どこから来るのかわかりません。だから、私は4つの構造体を持っています.4つの構造体のうちの1つは、複数の1対1の関係を持っています。Golang Gormが構造体を移動する際にエラーが発生する

私は自分のデータベースに接続し、automigrateを使用して4つの構造体を移行し、必要なテーブルを作成します。 問題はこの時点で、それはデータベースには何も作成しませんし、端末に私はこのメッセージを持っている: (エラー1060:すでに使用中の「ID」フィールドの名前)

私のコード メイン私を置くことができる答えを待っている.GO

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"` 
} 

右パス:

答えて

1

AutoMigrateは、テーブル、欠落した列および欠落した索引のみを作成し、既存の列の型を変更したり、未使用の列を削除してデータを保護したりしません。

私はあなたのテーブルのいずれかが既に存在していることを推測し、そのテーブルのid列はgorm.Modelが作りたいものとは異なるタイプです。私はそれがどのテーブルであるかを調べるでしょう:

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

そしてそれが失敗するところを見てください。テーブルを完全に削除するか、idカラムの名前をtmp_idに変更してください。もしautomigrateがそれを修正したら、tmp_idカラムを削除してください。

関連する問題