繁体   English   中英

如何通过 sequelize 获取用户角色?

[英]How to get user-roles with sequelize?

我有一个这样的现实:

在此处输入图像描述

在我的解析器中,我正在获取这样的实体:

users: async () => {
  const users = await db.user.findAll({
    include: [
      {
        model: db.userroles,
        include: [
          {
            model: db.roles,
            attributes: ['Name'],
          },
        ],
      },
    ],
  });

我记录了从数据库中得到的信息:

 console.log('users are', users[0].dataValues.userroles[0].dataValues.role.Name); // logs "users are developer"

这表明我获取了正确的角色。

我的 graphql 架构:

  type user {
    Id: ID!
    Email: String
    RoleId: Int!
    Password: String
    ChangedPassword: Boolean
    WeddingId: Int!
    AttendantId: Int
    role: [roles!]
  }

  type roles {
    Id: ID!
    Name: String!
  }

在操场上,我发送这个:

{users
  {role
  {Name}}
}

结果:

  "data": {
    "users": [
      {
        "role": null
      }
    ]
  }
}

当我记录从数据库返回的整个用户 object 时:

users are userroles {
  dataValues:
   { UserId: 1,
     RoleId: 1,
     role:
      roles {
        dataValues: [Object],
        _previousDataValues: [Object],
        _changed: {},
        _modelOptions: [Object],
        _options: [Object],
        isNewRecord: false } },
  _previousDataValues:
   { UserId: 1,
     RoleId: 1,
     role:
      roles {
        dataValues: [Object],
        _previousDataValues: [Object],
        _changed: {},
        _modelOptions: [Object],
        _options: [Object],
        isNewRecord: false } },
  _changed: {},
  _modelOptions:
   { timestamps: false,
     validate: {},
     freezeTableName: true,
     underscored: false,
     paranoid: false,
     rejectOnEmpty: false,
     whereCollection: null,
     schema: null,
     schemaDelimiter: '',
     defaultScope: {},
     scopes: {},
     indexes: [],
     name: { plural: 'userroles', singular: 'userrole' },
     omitNull: false,
     tableName: 'userroles',
     sequelize:
      Sequelize {
        options: [Object],
        config: [Object],
        dialect: [MysqlDialect],
        queryInterface: [QueryInterface],
        models: [Object],
        modelManager: [ModelManager],
        connectionManager: [ConnectionManager],
        importCache: [Object] },
     hooks: {} },
  _options:
   { isNewRecord: false,
     _schema: null,
     _schemaDelimiter: '',
     include: [ [Object] ],
     includeNames: [ 'role' ],
     includeMap: { role: [Object] },
     includeValidated: true,
     raw: true,
     attributes: undefined },
  isNewRecord: false,
  role:
   roles {
     dataValues: { Name: 'Developer' },
     _previousDataValues: { Name: 'Developer' },
     _changed: {},
     _modelOptions:
      { timestamps: false,
        validate: {},
        freezeTableName: true,
        underscored: false,
        paranoid: false,
        rejectOnEmpty: false,
        whereCollection: null,
        schema: null,
        schemaDelimiter: '',
        defaultScope: {},
        scopes: {},
        indexes: [],
        name: [Object],
        omitNull: false,
        tableName: 'roles',
        sequelize: [Sequelize],
        hooks: {} },
     _options:
      { isNewRecord: false,
        _schema: null,
        _schemaDelimiter: '',
        include: undefined,
        includeNames: undefined,
        includeMap: undefined,
        includeValidated: true,
        raw: true,
        attributes: [Array] },
     isNewRecord: false } }

我得到了我只是不知道如何呈现它们的角色?

我认为问题出在我的解析器中,我缺少另一组包含但我不知道如何编写它。

userrolesuserRoles作为联结表具有多对多的关系。 如果您还没有,应该在user上定义这种关系:

user.belongsToMany(roles, { through: userRoles })

这将让您直接include角色:

const users = await db.user.findAll({
  include: [
    db.roles,
  ],
});

发布后,我注意到我的架构中存在一些问题。

我将架构更改为:

  type roles {
    Id: ID!
    Name: String!
  }

  type userroles {
    RoleId: ID!
    UserId: ID!
    role: roles
  }

  type user {
    Id: ID!
    Email: String
    RoleId: Int!
    Password: String
    ChangedPassword: Boolean
    WeddingId: Int!
    AttendantId: Int
    userroles: [userroles!]
  }

操场:

{users
  {userroles
  {role
  {Name}}}
}

结果:

  "data": {
    "users": [
      {
        "userroles": [
          {
            "role": {
              "Name": "Developer"
            }
          }
        ]
      }
    ]
  }
}

答案就在我眼前,但我专注于解析器中的代码。

留下这个问题,以防有人有另一种方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM