我想创建一个数据,然后返回值,但该值与另一个表相关.

User response struct

type UserRespone struct {
    ID        int           `json:"id,omitempty"`
    Email     string        `json:"email"`
    FirstName string        `json:"first_name"`
    LastName  string        `json:"last_name"`
    Address   string        `json:"address"`
    Roles     []roles.Roles `json:"roles" gorm:"many2many:users_roles;foreignKey:ID;joinForeignKey:UserID;references:ID;joinReferences:RolesID"`
}

Roles struct

type Roles struct {
    ID   int `json:"id" gorm:"<-:false;primaryKey"`
    Name string
}

这是一个创建数据的函数,我想返回值[]Roles.Roles

func (r *UserRepositoryImpl) AuthSignUp(ctx context.Context, req user.AuthSignUp) (user.UserRespone, error) {
    createdUser := req.ToUser()
    
    hashPassword, _ := bcrypt.GenerateFromPassword([]byte(createdUser.Password), bcrypt.DefaultCost)

    createdUser.Password = string(hashPassword[:])

    result := r.Db.
        WithContext(ctx).
        Create(&createdUser)

    for _, rolesID := range req.RolesID {
        userRole := new(user.UsersRoles)

        userRole.UserID = createdUser.ID
        userRole.RolesID = rolesID
        result = r.Db.WithContext(ctx).Create(&userRole)
    }

    return createdUser.ToResponse(), result.Error
}

我想像这样返回值:

user.UserResponse{
        ID:        4,
        Email:     "putri4@gmail.com",
        FirstName: "putri",
        LastName:  "cantik",
        Address:   "bonang",
        Roles: []roles.Roles{
            {
                ID: 1,
                Name: "Admin",
            },
            {
                ID: 2,
                Name: "Consumer",
            },
        },
    }

但当我创建一个数据集时,我只得到如下值:

user.UserRespones{
        ID:        4,
        Email:     "putri4@gmail.com",
        FirstName: "putri",
        LastName:  "cantik",
        Address:   "bonang",
        Roles:     []roles.Roles(nil),
    }

推荐答案

据我所知,您已经有了用户数据和角色ID.我想你只想得到角色名称:

err := r.db.Find(&createdUser.Roles, req.RolesID)
// err handling

也就是说,你的类型和名字有点不清楚.UserRespone(注意打字错误)可能应该命名为DBUser-它是否用作响应或其他东西并不重要,它代表用户的数据库条目,对吗?

此外,我只能假设类型和字段为createdUserUsersRoles,所以我可能遗漏了一些东西.

我认为createdUserUserRespone类型的--但是我预计Roles已经是完整的(并且您根本不需要查询任何东西).如果不是,那么您应该为它引入一个新的类型,例如RequestUser(与DBUser相反),它只包含Role个ID,而不是Role个名称.将来自请求、数据库条目和响应数据的数据压缩到同一类型中是令人困惑的(对我来说,耦合得有点太紧了).

Postgresql相关问答推荐

跟踪状态更改为特定值的日期

在PostgreSQL中是否有与SQLite R*Tree类似功能?

尽管违反了部分索引约束,Postgres 插入仍在发生

求和直到达到一个值 postgresql

PostgresQL:获取两个数组之间的对应数量

当我写 SELECT ~1;在 Postgresql 上它给了我 -2 结果.这是什么原因?它一直持续〜4和-5等

如何使用 SQLAlchemy 将列默认设置为 PostgreSQL 函数?

函数将多列作为单列而不是多列返回

在执行 postgresql 函数时提交事务

如何使用 ActiveRecord json 字段类型

Postgresql - 在 Big Data 库中使用数组的性能

是否可以在 Postgres 中存储一个 1 字节的数字?

Postgresql SERIAL 的工作方式是否不同?

在 postgreSQL 中更改序列名称

为 Django Postgres 连接强制 SSL

PGError:错误: column of relation does not exist

根据 Helm 图表设置值

在 postgres 中存在不同的 string_agg 问题

删除空行

PostgreSQL regexp_replace() 只保留一个空格