От нуля до многих: невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполнено - PullRequest
0 голосов
/ 11 февраля 2019

Я новичок в Го и Горм.Я хочу разобрать ответ API и сохранить две таблицы.Для каждой таблицы «отчетов» может быть от нуля до многих таблиц «personal_details».

Тем не менее, gorm выдал ошибку при применении ограничения внешнего ключа, потому что иногда в отклике API нет записи для PersonalDetail.

Я следовал документам gorm и пробовал отношение "многие-многие", но я думаю, что оно не работаетдля отношения ноль-ко-многим

db.Model(&Report{}).AddForeignKey("personal_detail_id", "personal_details(id)", "RESTRICT", "RESTRICT")

type Report struct{
  gorm.Model
  PersonalDetail PersonalDetail `json:"PersonalDetail" gorm:"foreignkey:PersonalDetailId"`
  PersonalDetailId uint
}

type PersonalDetail struct{
  gorm.Model
  Name string `json:"Name"`
  Age string `json:"Age"`

1 Ответ

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

Попробуйте определить ваши модели следующим образом:

type Report struct {
  gorm.Model
  PersonalDetail PersonalDetail `json:"PersonalDetail" gorm:"foreignkey:ReportId"`
}

type PersonalDetail struct {
  gorm.Model
  Name string `json:"Name"`
  Age string `json:"Age"`
  ReportId uint `sql:"type:bigint REFERENCES reports(id) ON DELETE CASCADE"`
}

У меня возникли проблемы с получением внешних ключей для работы в GORM, поэтому я обнаружил, что использование тега SQL для определения отношения, кажется, работает лучше,Это не так чисто, так как вам нужно определить фактическое имя базы данных, а не имя поля, но оно работает.

Также имейте в виду порядок, в котором вы переносите таблицы.Возможно, вам придется сделать это в таком порядке, чтобы на таблицы, которые еще не были созданы, не были ссылки.Для этого примера мигрируйте Reports до PersonalDetail.

...