我想创建一个数据,然后返回值,但该值与另一个表相关。用户响应结构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
- 它是否用作响应或其他东西并不重要,它代表用户的数据库条目,对吧?
此外,我只能对createdUser
and的类型和字段做出假设UsersRoles
,所以我可能遗漏了一些东西。
我认为createdUser
是类型UserRespone
- 但我希望它Roles
已经完成(并且您根本不必查询任何内容)。如果不是,那么您应该为此引入一个新类型,例如RequestUser
(与 相对DBUser
),它只包含 Role
ID 但不包含Role
名称。将请求中的数据、数据库条目和响应数据压缩到同一类型中是令人困惑的(而且有点太紧密了,不符合我的口味)。
- 1 回答
- 0 关注
- 298 浏览
添加回答
举报
0/150
提交
取消