You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Entgo中创建关联唯一非主键列的自定义外键?

Entgo Schema修改外键关联至users(name)唯一列

现有Schema定义

Pet 实体

type Pet struct {
    ent.Schema
}

// Fields of the Pet.
func (Pet) Fields() []ent.Field {
    return []ent.Field{
        field.String("name"),
    }
}

// Edges of the Pet.
func (Pet) Edges() []ent.Edge {
    return []ent.Edge{
        edge.From("owner", User.Type).
            Ref("pets").
            Unique(),
    }
}

User 实体

type User struct {
    ent.Schema
}

// Fields of the User.
func (User) Fields() []ent.Field {
    return []ent.Field{
        field.Int("age"),
        field.String("name").Unique(),
    }
}

// Edges of the User.
func (User) Edges() []ent.Edge {
    return []ent.Edge{
        edge.To("pets", Pet.Type),
    }
}

修改方案

要让Pet与User的关联外键指向users(name)而非默认的users(id),只需在Pet的Edge定义中添加Field和References方法,明确指定关联字段即可:

修改后的Pet Edge定义

// Edges of the Pet.
func (Pet) Edges() []ent.Edge {
    return []ent.Edge{
        edge.From("owner", User.Type).
            Ref("pets").
            Unique().
            Field("user_name"). // 定义pets表中存储外键的列名
            References("name"), // 指定关联User表的name字段(需为唯一约束)
    }
}

说明

  • Field("user_name"):指定在pets表中生成的外键列名称为user_name
  • References("name"):明确该外键关联User表的name字段,由于name已通过.Unique()设置为唯一约束,满足外键关联的要求
  • 修改完成后重新生成Ent代码,会自动创建pets.user_name -> users.name的外键关联

内容的提问来源于stack exchange,提问作者Zxilly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 12:21:03