如何在Gorm中按角色筛选用户?

如何在Gorm中按角色筛选用户?,go,go-gorm,Go,Go Gorm,我在理解文档时发现了一些问题。我使用了RESTAPI和Go,并尝试创建一个端点,在这里我只需要根据用户的角色提取用户。我尝试了不同的解决方案,但无法实现我所需要的。这就是我所做的,我不知道如何继续,所以我只能通过确切的角色来使用用户。如果有人能帮助我,我将不胜感激,因为我在文档中找不到更高级的东西 来自此端点的JSON响应是: [ { "ID": 1, "CreatedAt": "2020-12-09T14

我在理解文档时发现了一些问题。我使用了RESTAPI和Go,并尝试创建一个端点,在这里我只需要根据用户的角色提取用户。我尝试了不同的解决方案,但无法实现我所需要的。这就是我所做的,我不知道如何继续,所以我只能通过确切的角色来使用用户。如果有人能帮助我,我将不胜感激,因为我在文档中找不到更高级的东西

来自此端点的JSON响应是:

[
    {
        "ID": 1,
        "CreatedAt": "2020-12-09T14:40:55.171011+02:00",
        "UpdatedAt": "2020-12-09T14:40:55.175537+02:00",
        "DeletedAt": null,
        "email": "h@go.com",
        "password": "$2a$14$KN2wAOnfecAriBW0xeAJke.okEUlcpDHVeuk",
        "bearer": "eyJhbGciOiJIUzI1NiIs2lhdCI6MTYwNjMwNTEzNn0.J2wBp8ecA9TebP6L73qZ1OZmo02DwQy9vTySt0fil4c",
        "first_name": "H",
        "last_name": "Pro",
        "phone": "353456",
        "salesforce_id": "sfsdddfsdf",
        "webflow_id": "wfwfwfaawfw",
        "Roles": null
    },
    {
        "ID": 2,
        "CreatedAt": "2020-12-09T14:40:55.171011+02:00",
        "UpdatedAt": "2020-12-09T14:40:55.175537+02:00",
        "DeletedAt": null,
        "email": "s@go.com",
        "password": "$2wAOnfecAriBW0xeAJke.okEUlcpDHVeuk",
        "bearer": "eyJhbGiIs2lhdCI6MTYwNjMwNTEzNn0.J2wBp8ecA9TebP6L73qZ1OZmo02DwQy9vTy0fil4c",
        "first_name": "S",
        "last_name": "Test",
        "phone": "3556",
        "salesforce_id": "sfsdf",
        "webflow_id": "wfwfwfw",
        "Roles": null
    }
]
type User struct {
    gorm.Model
    Email        string  `json:"email"`
    Password     string  `json:"password"`
    Token        string  `json:"bearer"`
    FirstName    string  `json:"first_name"`
    LastName     string  `json:"last_name"`
    Phone        string  `json:"phone"`
    SalesforceID string  `json:"salesforce_id"`
    WebflowID    string  `json:"webflow_id"`
    Roles        []*Roles `gorm:"constraint:OnUpdate:CASCADE,OnDelete:SET NULL;many2many:user_roles;"`
}
type Roles struct {
    gorm.Model
    Name string `json:"name"`
    Users []*User `gorm:"many2many:user_roles"`
}
SELECT * FROM users
JOIN user_roles ON users.id = user_roles.user_id
JOIN roles ON user_roles.roles_id = roles.id
WHERE user_roles.roles_id = 1
type User struct {
    gorm.Model
    Email        string  `json:"email"`
    Password     string  `json:"password"`
    Token        string  `json:"bearer"`
    FirstName    string  `json:"first_name"`
    LastName     string  `json:"last_name"`
    Phone        string  `json:"phone"`
    SalesforceID string  `json:"salesforce_id"`
    WebflowID    string  `json:"webflow_id"`
    Roles        []Roles  `json:"roles" gorm:"constraint:OnUpdate:CASCADE,OnDelete:SET NULL;many2many:user_roles;"`
}
func (h *Handler) GetAllEmployees(c *gin.Context) {
    var users []models.User
    //var roles []models.Roles //the comment here is because I get error message roles is defined but never used
    var roleid int = 1
    //you need to extract roleID from your query string or request body
    
    tx := h.db.DB.
          Preload("Roles").
          Joins("INNER JOIN user_roles ON users.id = user_roles.user.id").
          Joins("INNER JOIN roles ON user_roles.roles_id = roles.id").
          Where("user_roles.roles_id = ?", roleid).
          Find(&users)

    if tx.Error != nil {
      //handle error
    }
    c.JSON(200, users)
}
用户结构:

[
    {
        "ID": 1,
        "CreatedAt": "2020-12-09T14:40:55.171011+02:00",
        "UpdatedAt": "2020-12-09T14:40:55.175537+02:00",
        "DeletedAt": null,
        "email": "h@go.com",
        "password": "$2a$14$KN2wAOnfecAriBW0xeAJke.okEUlcpDHVeuk",
        "bearer": "eyJhbGciOiJIUzI1NiIs2lhdCI6MTYwNjMwNTEzNn0.J2wBp8ecA9TebP6L73qZ1OZmo02DwQy9vTySt0fil4c",
        "first_name": "H",
        "last_name": "Pro",
        "phone": "353456",
        "salesforce_id": "sfsdddfsdf",
        "webflow_id": "wfwfwfaawfw",
        "Roles": null
    },
    {
        "ID": 2,
        "CreatedAt": "2020-12-09T14:40:55.171011+02:00",
        "UpdatedAt": "2020-12-09T14:40:55.175537+02:00",
        "DeletedAt": null,
        "email": "s@go.com",
        "password": "$2wAOnfecAriBW0xeAJke.okEUlcpDHVeuk",
        "bearer": "eyJhbGiIs2lhdCI6MTYwNjMwNTEzNn0.J2wBp8ecA9TebP6L73qZ1OZmo02DwQy9vTy0fil4c",
        "first_name": "S",
        "last_name": "Test",
        "phone": "3556",
        "salesforce_id": "sfsdf",
        "webflow_id": "wfwfwfw",
        "Roles": null
    }
]
type User struct {
    gorm.Model
    Email        string  `json:"email"`
    Password     string  `json:"password"`
    Token        string  `json:"bearer"`
    FirstName    string  `json:"first_name"`
    LastName     string  `json:"last_name"`
    Phone        string  `json:"phone"`
    SalesforceID string  `json:"salesforce_id"`
    WebflowID    string  `json:"webflow_id"`
    Roles        []*Roles `gorm:"constraint:OnUpdate:CASCADE,OnDelete:SET NULL;many2many:user_roles;"`
}
type Roles struct {
    gorm.Model
    Name string `json:"name"`
    Users []*User `gorm:"many2many:user_roles"`
}
SELECT * FROM users
JOIN user_roles ON users.id = user_roles.user_id
JOIN roles ON user_roles.roles_id = roles.id
WHERE user_roles.roles_id = 1
type User struct {
    gorm.Model
    Email        string  `json:"email"`
    Password     string  `json:"password"`
    Token        string  `json:"bearer"`
    FirstName    string  `json:"first_name"`
    LastName     string  `json:"last_name"`
    Phone        string  `json:"phone"`
    SalesforceID string  `json:"salesforce_id"`
    WebflowID    string  `json:"webflow_id"`
    Roles        []Roles  `json:"roles" gorm:"constraint:OnUpdate:CASCADE,OnDelete:SET NULL;many2many:user_roles;"`
}
func (h *Handler) GetAllEmployees(c *gin.Context) {
    var users []models.User
    //var roles []models.Roles //the comment here is because I get error message roles is defined but never used
    var roleid int = 1
    //you need to extract roleID from your query string or request body
    
    tx := h.db.DB.
          Preload("Roles").
          Joins("INNER JOIN user_roles ON users.id = user_roles.user.id").
          Joins("INNER JOIN roles ON user_roles.roles_id = roles.id").
          Where("user_roles.roles_id = ?", roleid).
          Find(&users)

    if tx.Error != nil {
      //handle error
    }
    c.JSON(200, users)
}
角色结构:

[
    {
        "ID": 1,
        "CreatedAt": "2020-12-09T14:40:55.171011+02:00",
        "UpdatedAt": "2020-12-09T14:40:55.175537+02:00",
        "DeletedAt": null,
        "email": "h@go.com",
        "password": "$2a$14$KN2wAOnfecAriBW0xeAJke.okEUlcpDHVeuk",
        "bearer": "eyJhbGciOiJIUzI1NiIs2lhdCI6MTYwNjMwNTEzNn0.J2wBp8ecA9TebP6L73qZ1OZmo02DwQy9vTySt0fil4c",
        "first_name": "H",
        "last_name": "Pro",
        "phone": "353456",
        "salesforce_id": "sfsdddfsdf",
        "webflow_id": "wfwfwfaawfw",
        "Roles": null
    },
    {
        "ID": 2,
        "CreatedAt": "2020-12-09T14:40:55.171011+02:00",
        "UpdatedAt": "2020-12-09T14:40:55.175537+02:00",
        "DeletedAt": null,
        "email": "s@go.com",
        "password": "$2wAOnfecAriBW0xeAJke.okEUlcpDHVeuk",
        "bearer": "eyJhbGiIs2lhdCI6MTYwNjMwNTEzNn0.J2wBp8ecA9TebP6L73qZ1OZmo02DwQy9vTy0fil4c",
        "first_name": "S",
        "last_name": "Test",
        "phone": "3556",
        "salesforce_id": "sfsdf",
        "webflow_id": "wfwfwfw",
        "Roles": null
    }
]
type User struct {
    gorm.Model
    Email        string  `json:"email"`
    Password     string  `json:"password"`
    Token        string  `json:"bearer"`
    FirstName    string  `json:"first_name"`
    LastName     string  `json:"last_name"`
    Phone        string  `json:"phone"`
    SalesforceID string  `json:"salesforce_id"`
    WebflowID    string  `json:"webflow_id"`
    Roles        []*Roles `gorm:"constraint:OnUpdate:CASCADE,OnDelete:SET NULL;many2many:user_roles;"`
}
type Roles struct {
    gorm.Model
    Name string `json:"name"`
    Users []*User `gorm:"many2many:user_roles"`
}
SELECT * FROM users
JOIN user_roles ON users.id = user_roles.user_id
JOIN roles ON user_roles.roles_id = roles.id
WHERE user_roles.roles_id = 1
type User struct {
    gorm.Model
    Email        string  `json:"email"`
    Password     string  `json:"password"`
    Token        string  `json:"bearer"`
    FirstName    string  `json:"first_name"`
    LastName     string  `json:"last_name"`
    Phone        string  `json:"phone"`
    SalesforceID string  `json:"salesforce_id"`
    WebflowID    string  `json:"webflow_id"`
    Roles        []Roles  `json:"roles" gorm:"constraint:OnUpdate:CASCADE,OnDelete:SET NULL;many2many:user_roles;"`
}
func (h *Handler) GetAllEmployees(c *gin.Context) {
    var users []models.User
    //var roles []models.Roles //the comment here is because I get error message roles is defined but never used
    var roleid int = 1
    //you need to extract roleID from your query string or request body
    
    tx := h.db.DB.
          Preload("Roles").
          Joins("INNER JOIN user_roles ON users.id = user_roles.user.id").
          Joins("INNER JOIN roles ON user_roles.roles_id = roles.id").
          Where("user_roles.roles_id = ?", roleid).
          Find(&users)

    if tx.Error != nil {
      //handle error
    }
    c.JSON(200, users)
}
我在Postgre中为我的案例进行的sql查询:

[
    {
        "ID": 1,
        "CreatedAt": "2020-12-09T14:40:55.171011+02:00",
        "UpdatedAt": "2020-12-09T14:40:55.175537+02:00",
        "DeletedAt": null,
        "email": "h@go.com",
        "password": "$2a$14$KN2wAOnfecAriBW0xeAJke.okEUlcpDHVeuk",
        "bearer": "eyJhbGciOiJIUzI1NiIs2lhdCI6MTYwNjMwNTEzNn0.J2wBp8ecA9TebP6L73qZ1OZmo02DwQy9vTySt0fil4c",
        "first_name": "H",
        "last_name": "Pro",
        "phone": "353456",
        "salesforce_id": "sfsdddfsdf",
        "webflow_id": "wfwfwfaawfw",
        "Roles": null
    },
    {
        "ID": 2,
        "CreatedAt": "2020-12-09T14:40:55.171011+02:00",
        "UpdatedAt": "2020-12-09T14:40:55.175537+02:00",
        "DeletedAt": null,
        "email": "s@go.com",
        "password": "$2wAOnfecAriBW0xeAJke.okEUlcpDHVeuk",
        "bearer": "eyJhbGiIs2lhdCI6MTYwNjMwNTEzNn0.J2wBp8ecA9TebP6L73qZ1OZmo02DwQy9vTy0fil4c",
        "first_name": "S",
        "last_name": "Test",
        "phone": "3556",
        "salesforce_id": "sfsdf",
        "webflow_id": "wfwfwfw",
        "Roles": null
    }
]
type User struct {
    gorm.Model
    Email        string  `json:"email"`
    Password     string  `json:"password"`
    Token        string  `json:"bearer"`
    FirstName    string  `json:"first_name"`
    LastName     string  `json:"last_name"`
    Phone        string  `json:"phone"`
    SalesforceID string  `json:"salesforce_id"`
    WebflowID    string  `json:"webflow_id"`
    Roles        []*Roles `gorm:"constraint:OnUpdate:CASCADE,OnDelete:SET NULL;many2many:user_roles;"`
}
type Roles struct {
    gorm.Model
    Name string `json:"name"`
    Users []*User `gorm:"many2many:user_roles"`
}
SELECT * FROM users
JOIN user_roles ON users.id = user_roles.user_id
JOIN roles ON user_roles.roles_id = roles.id
WHERE user_roles.roles_id = 1
type User struct {
    gorm.Model
    Email        string  `json:"email"`
    Password     string  `json:"password"`
    Token        string  `json:"bearer"`
    FirstName    string  `json:"first_name"`
    LastName     string  `json:"last_name"`
    Phone        string  `json:"phone"`
    SalesforceID string  `json:"salesforce_id"`
    WebflowID    string  `json:"webflow_id"`
    Roles        []Roles  `json:"roles" gorm:"constraint:OnUpdate:CASCADE,OnDelete:SET NULL;many2many:user_roles;"`
}
func (h *Handler) GetAllEmployees(c *gin.Context) {
    var users []models.User
    //var roles []models.Roles //the comment here is because I get error message roles is defined but never used
    var roleid int = 1
    //you need to extract roleID from your query string or request body
    
    tx := h.db.DB.
          Preload("Roles").
          Joins("INNER JOIN user_roles ON users.id = user_roles.user.id").
          Joins("INNER JOIN roles ON user_roles.roles_id = roles.id").
          Where("user_roles.roles_id = ?", roleid).
          Find(&users)

    if tx.Error != nil {
      //handle error
    }
    c.JSON(200, users)
}
用户结构:

[
    {
        "ID": 1,
        "CreatedAt": "2020-12-09T14:40:55.171011+02:00",
        "UpdatedAt": "2020-12-09T14:40:55.175537+02:00",
        "DeletedAt": null,
        "email": "h@go.com",
        "password": "$2a$14$KN2wAOnfecAriBW0xeAJke.okEUlcpDHVeuk",
        "bearer": "eyJhbGciOiJIUzI1NiIs2lhdCI6MTYwNjMwNTEzNn0.J2wBp8ecA9TebP6L73qZ1OZmo02DwQy9vTySt0fil4c",
        "first_name": "H",
        "last_name": "Pro",
        "phone": "353456",
        "salesforce_id": "sfsdddfsdf",
        "webflow_id": "wfwfwfaawfw",
        "Roles": null
    },
    {
        "ID": 2,
        "CreatedAt": "2020-12-09T14:40:55.171011+02:00",
        "UpdatedAt": "2020-12-09T14:40:55.175537+02:00",
        "DeletedAt": null,
        "email": "s@go.com",
        "password": "$2wAOnfecAriBW0xeAJke.okEUlcpDHVeuk",
        "bearer": "eyJhbGiIs2lhdCI6MTYwNjMwNTEzNn0.J2wBp8ecA9TebP6L73qZ1OZmo02DwQy9vTy0fil4c",
        "first_name": "S",
        "last_name": "Test",
        "phone": "3556",
        "salesforce_id": "sfsdf",
        "webflow_id": "wfwfwfw",
        "Roles": null
    }
]
type User struct {
    gorm.Model
    Email        string  `json:"email"`
    Password     string  `json:"password"`
    Token        string  `json:"bearer"`
    FirstName    string  `json:"first_name"`
    LastName     string  `json:"last_name"`
    Phone        string  `json:"phone"`
    SalesforceID string  `json:"salesforce_id"`
    WebflowID    string  `json:"webflow_id"`
    Roles        []*Roles `gorm:"constraint:OnUpdate:CASCADE,OnDelete:SET NULL;many2many:user_roles;"`
}
type Roles struct {
    gorm.Model
    Name string `json:"name"`
    Users []*User `gorm:"many2many:user_roles"`
}
SELECT * FROM users
JOIN user_roles ON users.id = user_roles.user_id
JOIN roles ON user_roles.roles_id = roles.id
WHERE user_roles.roles_id = 1
type User struct {
    gorm.Model
    Email        string  `json:"email"`
    Password     string  `json:"password"`
    Token        string  `json:"bearer"`
    FirstName    string  `json:"first_name"`
    LastName     string  `json:"last_name"`
    Phone        string  `json:"phone"`
    SalesforceID string  `json:"salesforce_id"`
    WebflowID    string  `json:"webflow_id"`
    Roles        []Roles  `json:"roles" gorm:"constraint:OnUpdate:CASCADE,OnDelete:SET NULL;many2many:user_roles;"`
}
func (h *Handler) GetAllEmployees(c *gin.Context) {
    var users []models.User
    //var roles []models.Roles //the comment here is because I get error message roles is defined but never used
    var roleid int = 1
    //you need to extract roleID from your query string or request body
    
    tx := h.db.DB.
          Preload("Roles").
          Joins("INNER JOIN user_roles ON users.id = user_roles.user.id").
          Joins("INNER JOIN roles ON user_roles.roles_id = roles.id").
          Where("user_roles.roles_id = ?", roleid).
          Find(&users)

    if tx.Error != nil {
      //handle error
    }
    c.JSON(200, users)
}
角色结构

type Roles struct {
    gorm.Model
    Name string `json:"name"`
    Users []*User `gorm:"many2many:user_roles"`
}
端点:

[
    {
        "ID": 1,
        "CreatedAt": "2020-12-09T14:40:55.171011+02:00",
        "UpdatedAt": "2020-12-09T14:40:55.175537+02:00",
        "DeletedAt": null,
        "email": "h@go.com",
        "password": "$2a$14$KN2wAOnfecAriBW0xeAJke.okEUlcpDHVeuk",
        "bearer": "eyJhbGciOiJIUzI1NiIs2lhdCI6MTYwNjMwNTEzNn0.J2wBp8ecA9TebP6L73qZ1OZmo02DwQy9vTySt0fil4c",
        "first_name": "H",
        "last_name": "Pro",
        "phone": "353456",
        "salesforce_id": "sfsdddfsdf",
        "webflow_id": "wfwfwfaawfw",
        "Roles": null
    },
    {
        "ID": 2,
        "CreatedAt": "2020-12-09T14:40:55.171011+02:00",
        "UpdatedAt": "2020-12-09T14:40:55.175537+02:00",
        "DeletedAt": null,
        "email": "s@go.com",
        "password": "$2wAOnfecAriBW0xeAJke.okEUlcpDHVeuk",
        "bearer": "eyJhbGiIs2lhdCI6MTYwNjMwNTEzNn0.J2wBp8ecA9TebP6L73qZ1OZmo02DwQy9vTy0fil4c",
        "first_name": "S",
        "last_name": "Test",
        "phone": "3556",
        "salesforce_id": "sfsdf",
        "webflow_id": "wfwfwfw",
        "Roles": null
    }
]
type User struct {
    gorm.Model
    Email        string  `json:"email"`
    Password     string  `json:"password"`
    Token        string  `json:"bearer"`
    FirstName    string  `json:"first_name"`
    LastName     string  `json:"last_name"`
    Phone        string  `json:"phone"`
    SalesforceID string  `json:"salesforce_id"`
    WebflowID    string  `json:"webflow_id"`
    Roles        []*Roles `gorm:"constraint:OnUpdate:CASCADE,OnDelete:SET NULL;many2many:user_roles;"`
}
type Roles struct {
    gorm.Model
    Name string `json:"name"`
    Users []*User `gorm:"many2many:user_roles"`
}
SELECT * FROM users
JOIN user_roles ON users.id = user_roles.user_id
JOIN roles ON user_roles.roles_id = roles.id
WHERE user_roles.roles_id = 1
type User struct {
    gorm.Model
    Email        string  `json:"email"`
    Password     string  `json:"password"`
    Token        string  `json:"bearer"`
    FirstName    string  `json:"first_name"`
    LastName     string  `json:"last_name"`
    Phone        string  `json:"phone"`
    SalesforceID string  `json:"salesforce_id"`
    WebflowID    string  `json:"webflow_id"`
    Roles        []Roles  `json:"roles" gorm:"constraint:OnUpdate:CASCADE,OnDelete:SET NULL;many2many:user_roles;"`
}
func (h *Handler) GetAllEmployees(c *gin.Context) {
    var users []models.User
    //var roles []models.Roles //the comment here is because I get error message roles is defined but never used
    var roleid int = 1
    //you need to extract roleID from your query string or request body
    
    tx := h.db.DB.
          Preload("Roles").
          Joins("INNER JOIN user_roles ON users.id = user_roles.user.id").
          Joins("INNER JOIN roles ON user_roles.roles_id = roles.id").
          Where("user_roles.roles_id = ?", roleid).
          Find(&users)

    if tx.Error != nil {
      //handle error
    }
    c.JSON(200, users)
}
编辑:

[
    {
        "ID": 1,
        "CreatedAt": "2020-12-09T14:40:55.171011+02:00",
        "UpdatedAt": "2020-12-09T14:40:55.175537+02:00",
        "DeletedAt": null,
        "email": "h@go.com",
        "password": "$2a$14$KN2wAOnfecAriBW0xeAJke.okEUlcpDHVeuk",
        "bearer": "eyJhbGciOiJIUzI1NiIs2lhdCI6MTYwNjMwNTEzNn0.J2wBp8ecA9TebP6L73qZ1OZmo02DwQy9vTySt0fil4c",
        "first_name": "H",
        "last_name": "Pro",
        "phone": "353456",
        "salesforce_id": "sfsdddfsdf",
        "webflow_id": "wfwfwfaawfw",
        "Roles": null
    },
    {
        "ID": 2,
        "CreatedAt": "2020-12-09T14:40:55.171011+02:00",
        "UpdatedAt": "2020-12-09T14:40:55.175537+02:00",
        "DeletedAt": null,
        "email": "s@go.com",
        "password": "$2wAOnfecAriBW0xeAJke.okEUlcpDHVeuk",
        "bearer": "eyJhbGiIs2lhdCI6MTYwNjMwNTEzNn0.J2wBp8ecA9TebP6L73qZ1OZmo02DwQy9vTy0fil4c",
        "first_name": "S",
        "last_name": "Test",
        "phone": "3556",
        "salesforce_id": "sfsdf",
        "webflow_id": "wfwfwfw",
        "Roles": null
    }
]
type User struct {
    gorm.Model
    Email        string  `json:"email"`
    Password     string  `json:"password"`
    Token        string  `json:"bearer"`
    FirstName    string  `json:"first_name"`
    LastName     string  `json:"last_name"`
    Phone        string  `json:"phone"`
    SalesforceID string  `json:"salesforce_id"`
    WebflowID    string  `json:"webflow_id"`
    Roles        []*Roles `gorm:"constraint:OnUpdate:CASCADE,OnDelete:SET NULL;many2many:user_roles;"`
}
type Roles struct {
    gorm.Model
    Name string `json:"name"`
    Users []*User `gorm:"many2many:user_roles"`
}
SELECT * FROM users
JOIN user_roles ON users.id = user_roles.user_id
JOIN roles ON user_roles.roles_id = roles.id
WHERE user_roles.roles_id = 1
type User struct {
    gorm.Model
    Email        string  `json:"email"`
    Password     string  `json:"password"`
    Token        string  `json:"bearer"`
    FirstName    string  `json:"first_name"`
    LastName     string  `json:"last_name"`
    Phone        string  `json:"phone"`
    SalesforceID string  `json:"salesforce_id"`
    WebflowID    string  `json:"webflow_id"`
    Roles        []Roles  `json:"roles" gorm:"constraint:OnUpdate:CASCADE,OnDelete:SET NULL;many2many:user_roles;"`
}
func (h *Handler) GetAllEmployees(c *gin.Context) {
    var users []models.User
    //var roles []models.Roles //the comment here is because I get error message roles is defined but never used
    var roleid int = 1
    //you need to extract roleID from your query string or request body
    
    tx := h.db.DB.
          Preload("Roles").
          Joins("INNER JOIN user_roles ON users.id = user_roles.user.id").
          Joins("INNER JOIN roles ON user_roles.roles_id = roles.id").
          Where("user_roles.roles_id = ?", roleid).
          Find(&users)

    if tx.Error != nil {
      //handle error
    }
    c.JSON(200, users)
}
根据以下所有答案,这里需要发生以下事情:

  • 您需要将
    角色
    结构重命名为
    角色
  • 您需要为每个对象加载
    角色
  • 按特定角色ID筛选用户
  • 首先,您需要将
    角色
    结构重命名为
    角色
    ,并更改对它的引用:

    角色结构

    type Role struct {
        gorm.Model
        Name string `json:"name"`
        Users []User `gorm:"many2many:user_roles"`
    }
    
    type User struct {
        gorm.Model
        Email        string  `json:"email"`
        Password     string  `json:"password"`
        Token        string  `json:"bearer"`
        FirstName    string  `json:"first_name"`
        LastName     string  `json:"last_name"`
        Phone        string  `json:"phone"`
        SalesforceID string  `json:"salesforce_id"`
        WebflowID    string  `json:"webflow_id"`
        Roles        []Role `gorm:"constraint:OnUpdate:CASCADE,OnDelete:SET NULL;many2many:user_roles;"`
    }
    
    用户结构

    type Role struct {
        gorm.Model
        Name string `json:"name"`
        Users []User `gorm:"many2many:user_roles"`
    }
    
    type User struct {
        gorm.Model
        Email        string  `json:"email"`
        Password     string  `json:"password"`
        Token        string  `json:"bearer"`
        FirstName    string  `json:"first_name"`
        LastName     string  `json:"last_name"`
        Phone        string  `json:"phone"`
        SalesforceID string  `json:"salesforce_id"`
        WebflowID    string  `json:"webflow_id"`
        Roles        []Role `gorm:"constraint:OnUpdate:CASCADE,OnDelete:SET NULL;many2many:user_roles;"`
    }
    
    接下来,稍微修改一下代码。这里有一个连接是不必要的:

    func (h *Handler) GetAllEmployeesByRoleID(c *gin.Context) {
            var users []models.User
            var roleID int = 1
            //you need to extract roleID from your query string or request body
            
            tx := h.db.DB.
                  Preload("Roles").
                  Joins("INNER JOIN user_roles ur ON ur.user_id = users.id").
                  Where("ur.role_id = ?", roleID).
                  Find(&users)
    
            if tx.Error != nil {
              //handle error
              c.JSON(500, tx.Error)
              return
            }  
            
            c.JSON(200, users)
    }
    
    因此,您添加了
    Preload(“Roles”)
    来加载用户可以拥有的所有角色,正如我假设的那样,即使您通过
    roleID
    进行筛选,您也希望看到用户可以拥有的所有角色


    您可以使用
    连接
    Where
    来构造您已经使用过的类似查询。
    角色
    表连接
    是不必要的,因为您在
    用户角色
    表中有所需的信息。

    基本上,您希望将
    角色
    加载到每个
    用户
    对象中,并按角色ID筛选用户?@Eminaletovic是的,完全正确。现在,正如您从json中看到的,我得到了角色列表,因为我将角色定义为一个数组,我编辑查询以满足我的需要,并且响应为空。另外,我可能不明白您的意思,因为var角色和var roleID表示未使用它们,IDE将它们标记为错误。您希望通过哪个角色ID过滤用户?您是将其传递给此端点方法还是硬编码的?我在Roles表中有id=1的role id字段,我将其分配给userif role id为1,然后硬编码。只需将其更改为
    var roleID int=1
    roleID:=1
    。我现在明白了。它仍然给我null作为响应,这对我来说非常奇怪