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

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),
    }
}

关键配置说明

  1. 反向关联逻辑:Like实体中已定义sender和receiver两个指向User的正向边,User这边通过edge.From建立反向关联,Ref参数指定对应Like边的名称,完成双向绑定。
  2. Unique(false):一个用户可以发送多条点赞,也能接收多条点赞,因此不能设置为唯一关联。
  3. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 03:45:02