首页 文章

Golang Gorm错误迁移结构

提问于
浏览
1

我的小应用程序中有一个小错误,我真的不知道它可以来自哪里 . 所以我有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

    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 列 .

  • 1

    仅供参考我发现如果用户有权限问题,Gorm将不会记录正确的错误或任何错误 . 例如,当以root身份登录时,表存在,但是我登录的用户完全没有看到它,Gorm只是在没有创建表或改变它的情况下运行迁移(即使它是不同的模式)只是没有' t报告任何权限问题 .

相关问题