Entgo社交约会应用Like关联表与User边配置求助
解决方案
要实现通过Like关联表存储点赞元数据,并在User实体上添加sent_likes和received_likes边,你需要修改User的Edges配置,通过反向关联绑定到Like实体的对应边。
修改后的User Schema(完整代码)
package schema import ( "time" "entgo.io/ent" "entgo.io/ent/schema/edge" "entgo.io/ent/schema/field" "github.com/go-openapi/strfmt" "github.com/google/uuid" ) // User holds the schema definition for the User entity. type User struct { ent.Schema } // Fields of the User. func (User) Fields() []ent.Field { return []ent.Field{ // Database Timestamps and Versioning field.UUID("id", uuid.UUID{}). Default(uuid.New). StorageKey("oid"), field.Time("created_at"). Default(time.Now). Immutable(), field.Time("updated_at"). Default(time.Now). UpdateDefault(time.Now), field.Time("deleted_at"). Optional(). Nillable(), field.Int32("version"). Default(1), // User Fields field.String("first_name"). NotEmpty(), field.String("last_name"). NotEmpty(), } } // Edges of the User. func (User) Edges() []ent.Edge { return []ent.Edge{ edge.To("profile", Profile.Type). Unique(), edge.To("matches", User.Type), // 用户发出的点赞:关联到Like实体的sender边 edge.From("sent_likes", Like.Type). Ref("sender"). Unique(false), // 用户收到的点赞:关联到Like实体的receiver边 edge.From("received_likes", Like.Type). Ref("receiver"). Unique(false), } }
关键配置说明
- 反向关联逻辑:Like实体中已定义
sender和receiver两个指向User的正向边,User这边通过edge.From建立反向关联,Ref参数指定对应Like边的名称,完成双向绑定。 - Unique(false):一个用户可以发送多条点赞,也能接收多条点赞,因此不能设置为唯一关联。
- Like Schema无需修改:你当前的Like配置已正确设置复合主键(
sender_id+receiver_id)和外键绑定,符合关联表存储元数据的需求。
生成代码后的使用示例
// 查询用户发送的所有点赞(包含created_at元数据) sentLikes, err := client.User.Query(). Where(User.ID(targetUserID)). QuerySentLikes(). WithSender(). WithReceiver(). All(ctx) // 查询用户收到的所有点赞 receivedLikes, err := client.User.Query(). Where(User.ID(targetUserID)). QueryReceivedLikes(). WithSender(). WithReceiver(). All(ctx)
内容的提问来源于stack exchange,提问作者Inventor Andy
相关产品推荐
相关产品推荐

