【发布时间】:2021-08-12 01:37:16
【问题描述】:
假设我有这 3 个结构
type Question struct {
gorm.Model
Id *uint64 `json:"id" gorm:"column=id;primaryKey;autoIncrement"`
Name string `json:"name" gorm:"unique"`
SkillId *uint64 `json:"skill_id"`
TestQuestions []TestQuestion `json:"test_questions"`
}
type Skill struct {
gorm.Model
SkillName string `json:"skill_name"`
Question []Question
}
type TestQuestion struct {
gorm.Model
QuestionId uint64 `json:"question_id"`
TestId uint64 `json:"test_id"`
}
我想选择所有问题,对于每个问题,我想选择该问题的技能名称而不是技能 ID,并且我想预加载 TestQuestion 我试图让这个结构来存储我的结果
type struct QuestionResponse(
SkillName string
Name string `json:"name"`
TestQuestions TestQuestion `json:"test_questions"`
}
我试过这个查询
db.Table("questions").Preload("TestQuestions").
Joins("inner join skills on questions.skill_id = skills.id").
Select("questions.name,skills.skill_name, questions.difficulty, questions.max_points, questions.type, questions.expected_time, questions.question_text,questions.file_read_me").
Find(&question)
但我收到此错误“为 struct github.com ...../models.QuestionResponse 的字段 TestQuestions 找到无效字段:为关系定义有效外键或实现 Valuer/Scanner 接口” 有什么解决办法吗?
【问题讨论】:
-
在关系数据库中,列不能是数组,而是在对象数据库中(mongo、elasticsaerch);技能表应该是这样的: type Skill struct { gorm.Model SkillName string
json:"skill_name"QuestionId int // 表问题中的问题 ID } -
一个问题有一个技能,一个技能在很多问题中,这就是为什么他需要以他的方式定义结构