【问题标题】:Golang Gorm error migrating structGolang Gorm错误迁移结构
【发布时间】:2017-01-03 20:02:10
【问题描述】:

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

我连接到我的数据库并使用自动迁移来迁移我的 4 个结构并创建必要的表。 问题出在这一点上,它没有在数据库中创建任何内容,并且在终端中我收到以下消息: (错误 1060:“id”字段的名称已在使用中)

我的代码 ma​​in.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"`
}

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

【问题讨论】:

    标签: mysql go go-gorm


    【解决方案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 列。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2021-02-07
        • 2021-11-02
        • 2021-12-27
        • 2023-01-04
        • 2021-06-06
        • 1970-01-01
        • 1970-01-01
        • 2021-05-28
        • 2020-04-18
        相关资源
        最近更新 更多