我想創建一個數據,然后返回值,但該值與另一個表相關。用戶響應結構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: "[email protected]", FirstName: "putri", LastName: "cantik", Address: "bonang", Roles: []roles.Roles{ { ID: 1, Name: "Admin", }, { ID: 2, Name: "Consumer", }, }, }但是當我創建數據集時,我只會得到如下值:user.UserRespones{ ID: 4, Email: "[email protected]", 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 關注
- 319 瀏覽
添加回答
舉報
0/150
提交
取消