Golang Gorm错误迁移结构

时间:2017-01-03 20:02:10

标签: mysql go go-gorm

我的小应用程序中有一个小错误,我真的不知道它可以来自哪里。所以我有4个结构,4个结构中的一个有几个一对一的关系。

我连接到我的数据库并使用automigrate迁移我的4个结构并创建必要的表。 问题是在这一点上,它没有在数据库中创建任何东西,在终端中我有这样的消息: (错误1060:'id'字段的名称已在使用中)

我的代码 的 main.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:root@/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"`
}

等待一个可以让我走上正确道路的答案:)

2 个答案:

答案 0 :(得分:1)

  

AutoMigrate仅会创建表格,缺少列和缺少索引,并且WON&#T; T更改现有列的类型或删除未使用的列以保护您的数据。

我猜你的一个表已经存在,并且该表中的id列与gorm.Model想要创建的列不同。我会弄清楚它是做什么的表:

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

并查看失败的地方。然后,我会备份该表(以防万一),然后完全删除表,或者将id列重命名为tmp_id,看看automigrate是否修复它,如果是,请删除{{1} }专栏。

答案 1 :(得分:0)

仅供参考,我发现Gorm不会记录正确的错误,或者如果用户具有权限问题,则不会记录任何错误。例如,当以root用户身份登录时该表存在,但我登录时根本看不到的用户,Gorm只是运行了Migration,而没有创建表或对其进行更改(即使它是不同的架构)也只是没有。根本不报告任何权限问题。