javascript - 如何使用sequelize获取用户角色?

标签 javascript node.js graphql sequelize.js

我有这样的想法:

enter image description here

在我的解析器中,我正在获取如下实体:

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"

这表明我已获取正确的 Angular 色。

我的 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!
  }

在 Playground 上我发送这个:

{users
  {role
  {Name}}
}

结果:

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

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

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 } }

我收到了 Angular 色,但我只是不知道如何呈现它们?

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

最佳答案

userroles 具有多对多关系,以 userRoles 作为联结表。如果您还没有,应该在 user 上定义此关系:

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

这将让您直接包含 Angular 色:

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

关于javascript - 如何使用sequelize获取用户角色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61205964/

相关文章:

javascript - 每次调用 JavaScript 函数时启动 CSS 动画?

javascript - Angular Directive(指令)中的 Google map : How to change infoWindow HTML content

javascript - 如何从字符串中提取硬盘序列号

php - php 和 node.js 之间 pbkdf2 的差异

javascript - React Apollo 客户端的 Mutation 组件中的 refetchQueries 不起作用?

python - 如何使用过滤器搜索特定数据集

javascript - jQuery 查找标签之间的文本

javascript - 无法重置所选选项值

javascript - 我如何在socket.io 1.0中断开服务器端和客户端的套接字

amazon-web-services - 什么是有效的 AWSPhone?可以使用哪些测试值?