为了账号安全,请及时绑定邮箱和手机立即绑定

Gorm 创建并返回值 many2many

Gorm 创建并返回值 many2many

Go
烙印99 2023-03-15 14:31:37
我想创建一个数据,然后返回值,但该值与另一个表相关。用户响应结构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"`}角色结构type Roles struct {    ID   int `json:"id" gorm:"<-:false;primaryKey"`    Name string}这是一个创建数据的函数,我想返回值 [ ]roles.Rolesfunc (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),    }
查看完整描述

1 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

据我所知,您已经拥有用户数据和角色 ID。我想您也只想获得角色名称:

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

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

此外,我只能对createdUserand的类型和字段做出假设UsersRoles,所以我可能遗漏了一些东西。

我认为createdUser是类型UserRespone- 但我希望它Roles已经完成(并且您根本不必查询任何内容)。如果不是,那么您应该为此引入一个新类型,例如RequestUser(与 相对DBUser),它只包含 RoleID 但不包含Role名称。将请求中的数据、数据库条目和响应数据压缩到同一类型中是令人困惑的(而且有点太紧密了,不符合我的口味)。


查看完整回答
反对 回复 2023-03-15
  • 1 回答
  • 0 关注
  • 298 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号