Сбой ограничения внешнего ключа в рекурсивной таблице с использованием MySQL 5.6 и GORM - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь добавить внешний ключ в рекурсивную таблицу и включить режим onDelete onUpdate CASCADE для удаления всех дочерних элементов при удалении родителя (то же самое с обновлением).

Я использую go1.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)

}

Я получил эту ошибку:

image

image

image

Я обновил этот код, и он наконец-то работает

1 Ответ

0 голосов
/ 26 февраля 2019

Попробуйте вместо этого:

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(), но такое жесткое кодирование, похоже, работает.

...