我的小应用程序中有一个小错误,我真的不知道它可以来自哪里。所以我有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"`
}
等待一个可以让我走上正确道路的答案:)
答案 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,而没有创建表或对其进行更改(即使它是不同的架构)也只是没有。根本不报告任何权限问题。