这是场景:问题和答案。一个问题可以没有答案,但(显然)答案必须指向一个问题。我希望能够提出问题并反对回答。基本的东西,但我不知道如何在 GORM 中实现它。
我有两个结构:
type Question struct {
Tenancy string `gorm:"primaryKey;autoIncrement:false"`
ID string `gorm:"primaryKey;autoIncrement:false"`
Text string
...
}
type Answer struct {
Tenancy string `gorm:"primaryKey;autoIncrement:false"`
ID string `gorm:"primaryKey;autoIncrement:false"`
Text string
...
}
我想实现这样的目标:
type Question struct {
Tenancy string
ID string
Text string
Answer *Answer // Optional answer - left join
...
}
type Answer struct {
Tenancy string
ID string
Text string
...
}
我在问题和答案上都有复合主键,理想情况下我想要两者之间的外键约束,即
(tenancy, id) references questions(tenancy, id)
然后能够执行类似
db.Joins("Answer").First(&question)
如有必要,我可以在
QuestionID
上添加一个额外的 Answer
字段,但我仍然无法弄清楚如何正确设置 FK。例如这个作品:
type Question struct {
Tenancy string
ID string
Text string
...
}
type Answer struct {
Tenancy string
ID string
QuestionID string `gorm:"not null;default:null"`
Question Question `gorm:"foreignKey:Tenancy,QuestionID;references:Tenancy,ID"`
Text string
...
}
这允许我获取带问题的答案,但我希望反过来,带(可为空)答案的问题。
如果我尝试在
Answer
上添加一个 Question
字段,迁移就会失败:
为结构问题的字段找到无效字段答案:为关系定义有效的外键或实现 Valuer/Scanner 接口
有什么想法吗?
似乎我把事情复杂化了:
type Question struct {
Tenancy string `gorm:"primaryKey;autoIncrement:false"`
ID string `gorm:"primaryKey;autoIncrement:false"`
Text string `gorm:"not null;default:null"`
Answer *Answer `gorm:"foreignKey:Tenancy,ID;references:Tenancy,ID"`
...
}
type Answer struct {
Tenancy string `gorm:"primaryKey;autoIncrement:false"`
ID string `gorm:"primaryKey;autoIncrement:false"`
Text string `gorm:"not null;default:null"`
...
}
生成正确的外键
• 如何仅在从孩子和父母的 ngIf 条件为真发送事件发射器后才触发父母的方法?
• 从 NestJS-Typescript 中的另一个表中获取一列(fk 和非 fk)
• NodeJS 派生的 Python 进程 - Python 的 process.send() 的替代方案?
• 孩子的定位。 .div 在父母内部。 div 与子 .div 在父 div 的右侧
• Django 管理员,如何在 StackedInline 记录中添加 FK 选择器
• Javascript - 如何删除具有特定 ID 的所有项目及其关联项目?然后是它的关联项及其后续项(递归?)
• 如何在 mysql 中制作带有验证和显示字段的存储过程?
• 每个组件实例都有一个 svelte store,同时能够全局访问它
• Django ORM中自引用子对象的order_by应该怎么做?