【问题标题】:change of model but database not changed accordingly更改模型但数据库未相应更改
【发布时间】:2020-12-13 08:17:18
【问题描述】:

我是 golang 的新手。

这是我的代码:

//main.go
type Project struct {
    gorm.Model
    Name string

}

type Log struct {
    gorm.Model
    Project Project
    User    User 
    CheckPoint string
    Status uint
}

type User struct {
    gorm.Model
    Name string
    Password string
}

//...

db.AutoMigrate(&Project{}, &Log{}, &User{})

我想:

Log.Project ==> Project.ID
Log.User ==> User.ID

但在数据库日志表中,它是:

desc logs;
+-------------+------------------+------+-----+---------+----------------+
| Field       | Type             | Null | Key | Default | Extra          |
+-------------+------------------+------+-----+---------+----------------+
| id          | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| created_at  | datetime         | YES  |     | NULL    |                |
| updated_at  | datetime         | YES  |     | NULL    |                |
| deleted_at  | datetime         | YES  | MUL | NULL    |                |
| check_point | varchar(255)     | YES  |     | NULL    |                |
| status      | int(10) unsigned | YES  |     | NULL    |                |
+-------------+------------------+------+-----+---------+----------------+

我看不到 ProjectID 和 UserID。

有什么指导吗?

提前谢谢你。

在 0825 上编辑:

你好, 也许我需要先解释一下自己。

我需要三个表:项目、用户、日志。

在日志中,它记录了which user 做了whatwhich project

我改变了一点:

type Project struct {
    gorm.Model
    Name string
}

type User struct {
    gorm.Model
    Name string
    Password string
}

type Log struct {
    gorm.Model
    ProjectID   uint
    UserID  uint
    CheckPoint string // ie: what to record
    Status uint // ie: record's status
}

...

db.Debug().Model(&Log{}).AddForeignKey("user_id", "users(id)", "RESTRICT", "RESTRICT")
db.Debug().Model(&Log{}).AddForeignKey("project_id", "projects(id)", "RESTRICT", "RESTRICT")

当我运行代码时,

Error 1452: Cannot add or update a child row: a foreign key constraint fails (`test`.`logs`, CONSTRAINT `logs_project_id_projects_id_foreign` FOREIGN KEY (`project_id`) REFERENCES `projects` (`id`))
Error 1452: Cannot add or update a child row: a foreign key constraint fails (`test`.`#sql-1a0f3_18`, CONSTRAINT `logs_user_id_users_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)) 

我迷路了。

【问题讨论】:

    标签: go go-gorm


    【解决方案1】:

    您正在使用has one 关系,因此外键将位于拥有的模型(项目和用户表应该有一个log_id)列中。也许你想要的是belongs to 关系。

    【讨论】:

    • 您好,感谢您提供的线索。我看过那个帖子,但我不确定我是否理解正确。因此,更改了来源,但发生了错误。没有两个AddForeignKey 行,没有错误,但我在show create table logs 中看不到任何外键。您想回复一些代码吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 2013-07-02
    • 1970-01-01
    • 2017-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多