登录
首页 >  Golang >  Go问答

gorm 插入表时遇到外键约束失败问题

来源:stackoverflow

时间:2024-02-15 19:57:25 373浏览 收藏

小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《gorm 插入表时遇到外键约束失败问题》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

问题内容

当我尝试插入具有一对多关系的 gorm 表时,出现此错误:

error 1452: cannot add or update a child row: a foreign key constraint fails (`todo`.`todos`, constraint `fk_users_todo_list` foreign key (`fk_id`) references `users` (`id`) on delete set null on update cascade)....

这些是我的模型:

type base struct {
    id        uint `gorm:"primarykey"`
    createdat time.time
    updatedat time.time
    deletedat *time.time `gorm:"index"`
}

type user struct {
    base
    firstname string           `form:"first_name" gorm:"type:varchar(20)"`
    lastname  string           `form:"last_name" gorm:"type:varchar(20)"`
    username  string           `form:"user_name" gorm:"unique;type:varchar(20)"`
    email     string           `form:"email" gorm:"type:varchar(100)"`
    password  string           `form:"password" gorm:"type:varchar(30)"`
    gender    types.usergender `form:"gender" gorm:"type:smallint"`
    todolist  []todo           `gorm:"foreignkey:fkid;constraint:ondelete:set null,onupdate:cascade" json:"omitempty"`
}

type todo struct {
    base
    name        string
    description string
    status      types.taskstatus
    fkid        uint
}

这是我编写的函数:

func (d *DB) AddTODO(todo *models.Todo, userName string) error {
    user := &models.User{UserName: userName}
    err := d.db.Model(&user).Where("user_name = ?", userName).Association("TodoList").
        Append([]models.Todo{*todo})
    if err != nil {
        return err
    }
    return nil
}

我正在使用 mariadb。


正确答案


它想要来自 gorm 结果的 user。改变你的方法可能是这样的:

// arg user is from gorm result somewhere
func (d *db) addtodo(user *models.user, todo *models.todo) error {
    return d.db.model(user).association("todolist").append([]models.todo{*todo})
}

todolist 缺少引用关键字。应该是这样的。

type User struct {
    Base
    FirstName string           `form:"first_name" gorm:"type:varchar(20)"`
    LastName  string           `form:"last_name" gorm:"type:varchar(20)"`
    UserName  string           `form:"user_name" gorm:"unique;type:varchar(20)"`
    Email     string           `form:"email" gorm:"type:varchar(100)"`
    Password  string           `form:"password" gorm:"type:varchar(30)"`
    Gender    types.UserGender `form:"gender" gorm:"type:smallint"`
    TodoList  []Todo           `gorm:"foreignKey:FkID;references:ID;constraint:onDelete:SET NULL,onUpdate:CASCADE" json:"omitempty"`
}

今天关于《gorm 插入表时遇到外键约束失败问题》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>