我刚接触golang gorm,最近遇到了一个协会的问题。
我创建的结构是:
type DeliveryItem struct {
..........
Targets []TargetType `json:"targets" gorm:"foreignkey:FK"`
}我创建了一个名为TargetType的结构,如下所示:
type TargetType struct {
name string
FK int
}因此,如果我发布了一些具有目标数组的数据,它将首先将数据存储到delivery item表中(但没有目标数据),然后将目标存储到一个单独的表中。所有的东西都与上面的结构一起工作。
但是,如果我创建一个匿名字段并将Targets放在匿名字段中,那么gorm不会将这些目标数据插入到表中。看起来它不能识别DeliveryItem和TargetType之间的关系
以下是不起作用的示例(为了简单起见,我没有提供确切的代码):
type DeliveryItem struct {
..........
CommonDetails
}
type CommonDetails struct {
................
Targets []TargetType `json:"targets" gorm:"foreignkey:FK"`
}
type TargetType struct {
name string
FK int
}我是不是错过了让gorm标签工作的任何东西,或者Gorm不支持这样的行为?我查看了gorm文档,它只谈到了我提供的第一个工作,但我只想让我失败的案例工作吗?
发布于 2019-10-12 06:20:36
如果你的失败案例可以工作,我会很惊讶,因为底层字段的结构是根本不同的。运行下面的代码示例,您可以看到不同之处。
package main
import "fmt"
type DeliveryItemEmbedded struct {
CommonDetails
}
type DeliveryItem struct {
Targets []TargetType `json:"targets" gorm:"foreignkey:FK"`
}
type CommonDetails struct {
Targets []TargetType `json:"targets" gorm:"foreignkey:FK"`
}
type TargetType struct {
name string
FK int
}
func main() {
targets := []TargetType{
TargetType{
name: "target 1",
FK: 2,
},
}
cd := CommonDetails{
Targets: targets,
}
die := DeliveryItemEmbedded{
cd,
}
di := DeliveryItem{
Targets: targets,
}
fmt.Printf("embedded: %+v\n", die)
fmt.Printf("non-embedded: %+v\n", di)
}提供:
embedded: {CommonDetails:{Targets:[{name:target 1 FK:2}]}}
non-embedded: {Targets:[{name:target 1 FK:2}]}我不熟悉gorm是如何在幕后工作的,但如果它能够间接解决CommonDetails问题,我会感到惊讶。不幸的是,在这种情况下,我不认为使用嵌入可以与gorm一起工作。
https://stackoverflow.com/questions/58347294
复制相似问题