【发布时间】:2021-05-07 19:35:19
【问题描述】:
我正在尝试使用 GORM (gorm.io/gorm v1.21.9) 在 GoLang (go 1.16) 中为数据库建模。
我的部分架构包括带有 2 个可选外键的表 A,实际上每条记录只使用 1 个。表 B 包含对表 A 的 2 个引用,例如二叉树。表C是一个叶子节点。
我设置了如下所示的 GORM 代码。
type A struct {
ID string
BID *string
B *B
CID *string
C *C
}
type B struct {
ID string
LeftAID string
LeftA A
RightAID string
RightA A
}
type C struct {
ID string
}
当我使用示例数据加载应用程序时,表 B 的外键始终为空值。
但是,表 A 对于每条记录都有一个 table_b_id 值(当 table_c_id 存在时应该为空)。
我猜,由于表 A 有表 B 的外键,它在所有情况下都使用该关联,而不是选择 right_a_id 和 left_a_id 关联。是否有可以解决此问题的 GORM 注释,或者这是 GORM 固有的限制?
请注意,我已经删除了不相关的架构信息并使用了抽象的表/列名。
【问题讨论】:
-
你声明了用于描述的gorm struct标签吗?
-
不,我使用的是默认值,这个模式的正确结构标签是什么?
-
看看GORM的文档,gorm.io/docs/many_to_many.html
-
谢谢,在发布之前和之后,我一直在查看文档。我还没有找到任何有效的方法。我希望 SO 上的某个人之前已经看过这个并且知道一组适用于这种模式的标签。如果我在这里找不到答案,我将不得不修改我的架构。