猿问

Gorm 创建并返回值 many2many

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


用户响应结构


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

    }


烙印99
浏览 346回答 1
1回答

HUH函数

据我所知,您已经拥有用户数据和角色 ID。我想您也只想获得角色名称:err&nbsp;:=&nbsp;r.db.Find(&createdUser.Roles,&nbsp;req.RolesID) //&nbsp;err&nbsp;handling也就是说,您的类型和名称有点不清楚。UserRespone(注意拼写错误)可能应该命名为DBUser- 它是否用作响应或其他东西并不重要,它代表用户的数据库条目,对吧?此外,我只能对createdUserand的类型和字段做出假设UsersRoles,所以我可能遗漏了一些东西。我认为createdUser是类型UserRespone- 但我希望它Roles已经完成(并且您根本不必查询任何内容)。如果不是,那么您应该为此引入一个新类型,例如RequestUser(与 相对DBUser),它只包含&nbsp;RoleID 但不包含Role名称。将请求中的数据、数据库条目和响应数据压缩到同一类型中是令人困惑的(而且有点太紧密了,不符合我的口味)。
随时随地看视频慕课网APP

相关分类

Go
我要回答