我想创建一个数据,然后返回值,但该值与另一个表相关。
用户响应结构
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。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),
}
1条答案
按热度按时间55ooxyrt1#
据我所知,您已经有了用户数据和角色ID。我想您还需要获取角色名称:
也就是说,您的类型和名称有点不清楚。
UserRespone
(注意拼写错误)可能应该命名为DBUser
-它是否用作响应或其他内容并不重要,它代表用户的数据库条目,对吗?此外,我只能对
createdUser
和UsersRoles
的类型和字段进行假设,因此我可能遗漏了一些东西。我认为
createdUser
的类型是UserRespone
-但我认为Roles
已经完成了(并且您根本不需要查询任何东西)。如果不是,那么您应该为此引入一个新类型,例如RequestUser
(与DBUser
相对),它只包含Role
id而不包含Role
名称。将DB条目和响应数据合并为同一类型是令人困惑的(而且对我来说耦合得有点太紧了)。