我在获取用户的分配角色时遇到一些问题。下面是主要的Get函数:
func (repo *UserRepository) Get(userID int) (*models.User, error) {
user := &models.User{}
err := repo.dbClient.Debug().
Joins("JOIN roles ON users.id = roles.id").Where("users.id = ?", userID).
Select("users.*, roles.roles"). // Assuming you want to find a user by their ID
Find(&user).Error
if err != nil {
log.Printf("failed to fetch user: %v\n", err)
return nil, err
}
return user, nil
}
在这里,我尝试返回用户和他的角色。下面是结构:
type Roles struct {
Id int `json:"id" gorm:"primaryKey"`
Roles string `json:"roles"`
}
type User struct {
Id int `json:"id" gorm:"primaryKey"`
Name string `json:"name"`
Password string `json:"pass"`
ImagePath string `json:"image"`
Roles []Roles ` gorm:"foreignKey:Id"`
}
问题是这两张table都不是空的。但是当我给予一个请求时返回的结果是:
{
"roles": [],
"id": 3,
"name": "fds",
"password": "$2a$14$FqrXrgQJ/gAkHHj/Ac9Ci.nyANGZyU6dotBtKWMk2h9Ac/mnPkeEK",
"image": ""
}
你可以看到角色是空的。
我不知道如何解决这个问题。你能帮帮我吗?
1条答案
按热度按时间d4so4syb1#
下面是
Preload
的例子:在你的代码中,有一些问题:
如果
Roles.Id
是User.Id
,那么User.Roles
的类型应该是string
而不是[]Roles
。因为关系是one to one
。因此,在我的示例代码中,我将
UserId
添加到Roles
,以获得关系one to many
。更多详情请参见文档:HasMany和Preload