假设我有这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,并且我想预加载测试问题,我试图使此结构存储我的结果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)但我得到这个错误“为结构github找到无效字段.com...../模型。问题响应的字段测试问题:为关系定义一个有效的外键或实现值机/扫描仪接口“任何解决方案?
1 回答
凤凰求蛊
TA贡献1825条经验 获得超4个赞
首先,我建议您在结构中使用 gorm 标签,然后使用第二个 gorm。模型已经给了我们一些基本的字段,比如ID作为主键等(https://gorm.io/docs/models.html#gorm-Model)但这里有一些节省时间的结构:
// gorm.Model definition
type Model struct {
ID uint `gorm:"primaryKey"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt gorm.DeletedAt `gorm:"index"`
}
我不明白你想用你的结构做什么,所以我建议你看看这个: Gorm关系错误:需要为关系定义一个有效的外键,或者它需要实现Valuer / Scanner接口,并更多地考虑数据库的关系。
基本:(感谢 https://stackoverflow.com/users/415628/ezequiel-muns )
外来键应命名连接到外部实体的模型本地键字段。
引用应命名外部实体的主键或唯一键。
请记住.预加载(“一些东西”),基本上会做一个选择(*),以满足你的结构的结构(例如。来自用户的订单)在您的数据库中,因此有时最好在嵌入中包含所需的字段,并为该选择提供唯一的结构,而不是“适合所有”结构。Gorm有一些功能,如省略()来省略插入或更新中的字段。
- 1 回答
- 0 关注
- 100 浏览
添加回答
举报
0/150
提交
取消