Создайте соединение GraphQL между пользователем и типом роли через роль и запросите их - PullRequest
0 голосов
/ 01 октября 2019

Я хочу создать соединение GraphQL между Пользователь <> Роль <> Role_Type и, наконец, получить тип роли пользователя обратно с запросом. Ниже приведено только несколько важных строк кода:

type Query {
  getUsers: [User]
}
type User {
  _id: ID
  firstname: String
  roles: [Role]
}
type Role {
  _id: ID
  role_type_id: ID
  role_types: [Role_Type]
  user_id: ID
}
type Role_Type {
  _id: ID
  name: String
}

и в резольвере пользователя у меня есть:

Query: {
  getUser: async (root, { _id }) => {
    return prepare(await DBUsers.findOne(ObjectId(_id)))
  }
},
User: {
  roles: async ({_id}) => {
    return (await MongoDBRoles.find({user_id: _id}).toArray()).map(prepare)
  }
}

, а для распознавателя ролей:

Role: {
  role_types: async ({_id}) => {
    return (await MongoDBRoleTypes.find({role_type_id: _id}).toArray()).map(prepare)
  },
},

Когда я запрашиваю сейчас:

{
  getUser(_id: "5d555adcd2c22a242863f7a1") {
    firstname
    roles {
      _id
      role_type_id
      user_id
      role_types {
        name
      }
    }
  }
}

, я получаю:

{
  "data": {
    "getUser": {
      "firstname": "Gregor",
      "roles": [
        {
          "_id": "5d90cf352f50882ab0ce3877",
          "role_type_id": "5d90ce48b7893d19bcc328f9",
          "user_id": "5d555adcd2c22a242863f7a1",
          "role_types": []
        }
      ]
    }
  }
}

Но почему role_types пусто. Как видите, role_type_id заполнено. Так почему нет связи.

Когда я смотрю в MongoDB, я вижу тип роли пользователя. MongoDB

Если вам нужно больше Schema / Resolver, дайте мне знать.

1 Ответ

0 голосов
/ 12 октября 2019

Хорошо, это было легко исправить. На самом деле Role resolver проходил несколько матчей. Но так или иначе это должен быть единственный поиск. Это не имеет особого смысла, но так или иначе поиск поиска идентификатора - единственный поиск. В любом случае, вот что я изменил, и теперь он работает правильно.

Замените это:

role_types: async ({_id}) => {
  return (await MongoDBRoleTypes.find({role_type_id: _id}).toArray()).map(prepare)
},

на:

role_type: async ({role_type_id}) => {
  return prepare(await DBRoleTypes.findOne(ObjectId(role_type_id)))
},

и вы исправите это.

...