Go gorm Go Gorm`has many`在匿名字段下不起作用

Go gorm Go Gorm`has many`在匿名字段下不起作用,go-gorm,Go Gorm,我是刚来golang gorm的新手,最近遇到了一个与协会有关的问题 我创建的结构是: type DeliveryItem struct { .......... Targets []TargetType `json:"targets" gorm:"foreignkey:FK"` } 我创建了一个名为TargetType的结构,如下所示: type TargetType struct { name string FK int

我是刚来golang gorm的新手,最近遇到了一个与协会有关的问题

我创建的结构是:

type DeliveryItem struct {
  ..........
  Targets  []TargetType     `json:"targets" gorm:"foreignkey:FK"`
}
我创建了一个名为TargetType的结构,如下所示:

type TargetType struct {
    name            string
    FK      int             
}
因此,如果我发布了一些具有目标数组的数据,它将首先将数据存储到delivery item表中(但没有目标数据),然后将目标存储到单独的表中。一切都与上述结构一起工作

但是,如果我创建一个匿名字段并将
目标
放在匿名字段中,那么gorm不会将这些目标数据插入表中。它似乎无法识别DeliveryItem和TargetType之间的关系

以下是不起作用的示例(为了简单起见,我没有提供确切的代码):


我是否错过了gorm tag让它工作的任何东西,或者gorm不支持这种行为?我查看了gorm文档,它只讨论了我提供的第一个有效的文档,但我只是想知道是否有可能使我的失败案例有效?

如果您的失败案例有效,我会感到惊讶,因为基础字段的结构根本不同。运行下面的代码示例可以看到差异

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起作用

embedded: {CommonDetails:{Targets:[{name:target 1 FK:2}]}}
non-embedded: {Targets:[{name:target 1 FK:2}]}