如何在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_nameReferences("name"):明确该外键关联User表的name字段,由于name已通过.Unique()设置为唯一约束,满足外键关联的要求- 修改完成后重新生成Ent代码,会自动创建
pets.user_name -> users.name的外键关联
内容的提问来源于stack exchange,提问作者Zxilly
相关产品推荐
相关产品推荐

