最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

go - Entgo O2M table relationship with staging table. error: "but it is not holding a foreign key" - Stack Ove

programmeradmin2浏览0评论

Please help me figure out an issue with setting up edges in Entgo. I have two schemas: LinkServiceDelivery and BridgeVersion.

  • BridgeVersion is the main table.
  • LinkServiceDelivery is a reference.

These tables are connected through the code_delivery_rk column as a One-to-Many (O2M) relationship. This means one version_rk from the BridgeVersion table can correspond to several service_rk from the LinkServiceDelivery table. It is necessary to connect via code_delivery_rk. That is, when requesting with WithLinkDelivery(), the selection was made by code_delivery_rk.

I am trying to set up the relationship using edges, but I constantly get the following error:

has a field "code_delivery_rk" but it is not holding a foreign key

I tried many variations, reviewed many examples, but could not apply the described patterns to my case.

BridgeVersion

package schemas

import (
    "entgo.io/ent"
    "entgo.io/ent/dialect"
    "entgo.io/ent/dialect/entsql"
    "entgo.io/ent/schema"
    "entgo.io/ent/schema/edge"
    "entgo.io/ent/schema/field"
)

type BridgeVersion struct {
    ent.Schema
}

func (BridgeVersion) Fields() []ent.Field {
    return []ent.Field{
        field.Int("id").SchemaType(map[string]string{
            dialect.Postgres: "bigserial",
        }).StorageKey("version_rk"),
        field.Int("code_delivery_rk"),
        field.Int("release_major_num"),
        field.Int("release_minor_num"),
        field.Int("release_fix_num"),
        field.Text("release_desc"),
        field.Time("release_build_dttm").SchemaType(map[string]string{
            dialect.Postgres: "timestamp with time zone",
        }),
        field.Time("release_delivery_dttm").SchemaType(map[string]string{
            dialect.Postgres: "timestamp with time zone",
        }),
    }
}

func (BridgeVersion) Annotations() []schema.Annotation {
    return []schema.Annotation{
        entsql.Annotation{Table: "bridge_version", Schema: "metamodel"},
    }
}

func (BridgeVersion) Edges() []ent.Edge {
    return []ent.Edge{
        edge.To("bridge_flow", BridgeFlow.Type),
        edge.From("dict_code_delivery", DictCodeDelivery.Type).Ref("bridge_version").Field("code_delivery_rk").Required().Unique(),
        edge.From("link_service_delivery", LinkServiceDelivery.Type).Ref("bridge_version").Field("code_delivery_rk"),
        //edge.To("bridge_service", BridgeService.Type).Through("link_service_delivery", LinkServiceDelivery.Type).Field("code_delivery_rk"),
        //edge.To("link_service_delivery", LinkServiceDelivery.Type).,
        //edge.To("group", BridgeVersion.Type),
        edge.To("flow_version_delivery", FlowVersionDelivery.Type).StorageKey(edge.Column("version_rk")),
    }
}

LinkServiceDelivery

package schemas

import (
    "entgo.io/ent"
    "entgo.io/ent/dialect/entsql"
    "entgo.io/ent/schema"
    "entgo.io/ent/schema/edge"
    "entgo.io/ent/schema/field"
)

type LinkServiceDelivery struct {
    ent.Schema
}

func (LinkServiceDelivery) Fields() []ent.Field {
    return []ent.Field{
        field.Int("id").StorageKey("service_rk"),
        field.Int("code_delivery_rk").StorageKey("code_delivery_rk"),
        field.Bool("is_ddl_flg"),
        field.Bool("is_flow_flg"),
        field.Bool("is_config_flg"),
    }
}

func (LinkServiceDelivery) Edges() []ent.Edge {
    return []ent.Edge{
        //edge.From("bridge_flow", BridgeFlow.Type).Ref("service").Through("t2", BridgeVersion.Type),
        //edge.To("bridge_service", BridgeService.Type).Unique().Required().Field("service_rk"),
        edge.To("bridge_version", BridgeVersion.Type).Field("code_delivery_rk"),
    }
}

func (LinkServiceDelivery) Annotations() []schema.Annotation {
    return []schema.Annotation{
        entsql.Annotation{Table: "link_service_delivery", Schema: "metric"},
    }
}

Now I have made a view, and made a classic relation through version_rk, this generally solved the problem, but I do not consider this the correct option. I'm new to entgo, please help me resolve this issue

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论