外键约束在使用MySQL 5.6和GORM的递归表中失败

问题描述 投票:1回答:1

我试图在递归表中添加一个外键,并启用onDelete onUpdate CASCADE模式删除父项被删除时的所有子项(与更新相同)。

我使用go 1.11.4和gorm作为ORM和MySQL 5.6

package main

import (
  "github.com/jinzhu/gorm"
  _ "github.com/jinzhu/gorm/dialects/mysql"
)

type User struct {
  gorm.Model
  Name string 
  Child   *User `gorm:"Foreignkey:Parent"` 
  Parent *uint
}

func main() {
  db, err := gorm.Open("mysql", "root@/testdb")
  if err != nil {
    panic("failed to connect database")
  }
  defer db.Close()

  // Migrate the schema
  db.AutoMigrate(&User{})
  db.Model(&User{}).AddForeignKey("parent","users(id)","CASCADE","CASCADE")

  // Create
  u := User{Name: "Parent"}
  db.Save(&u)

  u2 := User{Name: "Child", Parent: &u.ID}
  db.Save(&u2)

}

I got this error:

我更新了这段代码,终于可以了

mysql go go-gorm
1个回答
0
投票

试试这个:

type User struct {
  gorm.Model
  Name string 
  Child   *User `gorm:"Foreignkey:Parent"` 
  Parent uint   `sql:"type:bigint REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE"`
}

我在使用AddForeignKey()时遇到了麻烦,但硬编码似乎有效。

© www.soinside.com 2019 - 2024. All rights reserved.