为什么我的查询未返回枚举数组

时间:2019-07-03 05:59:45

标签: graphql apollo-server prisma

在GraphQL查询中查询枚举数组时遇到一些问题。我期望该数组或权限将根据类型与用户一起返回

很遗憾,当我在操场上(对于我的Prisma或Apollo-Server服务器)进行相同的查询时,我确实取回了阵列。

我的查询如下:

const user = await ctx.db.query.user({
  where: {
    id: ctx.userId
  }
});

我的类型定义如下:

type User {
    id: ID! @id
    name: String!
    email: String! @unique
    password: String!
    club: String!
    permissions: [Permission!]! @scalarList(strategy: RELATION)
    createdAt: DateTime! @createdAt
    updatedAt: DateTime! @updatedAt
}

权限类似

enum Permission {
    ADMIN
    CLUB_ADMIN
    USER
    FRIEND
}

我还没有包括我的查询解析器,因为我刚刚使用“ forward-to”将其转发到数据库。

但是用户的CL是

{ id: 'cjxm9ohfqvkvh0b5963iy734i',
  name: 'BERTIE BOBBINS',
  email: 'BERTIE@DOGS.COM',
  password: '$2b$10$eLPoBuuenogLabiFb4tRFu0KV7LI4LxARhHecPYVbP0qnt5VvcZ3W',
  club: 'Dog Club',
  createdAt: '2019-07-02T20:30:49.670Z',
  updatedAt: '2019-07-02T20:30:49.670Z' }

因此不包括Permissions数组。

2 个答案:

答案 0 :(得分:0)

Introspection系统自检类型

  1. __ Schema
  2. __类型
  3. __ TypeKind
  4. __ Field
  5. __ InputValue
  6. __ EnumValue
  7. __指令

要查询枚举,您需要使用__Type查询解析器。

enum Permission {
    ADMIN
    CLUB_ADMIN
    USER
    FRIEND
}

查询枚举

query 
{
 __type(name: "Permission") {
   name
   enumValues {
     name
   }
 }
}

__ type查询解析器需要name参数。此参数使您可以根据其名称在架构中搜索对象和枚举之类的项。

{
 "data": {
   "__type": {
   "name": "Permission", 
   "enumValues" : [
     {
       name: "ADMIN" 
     },
     { 
       name: "CLUB_ADMIN" 
     },
     { 
       name: "USER" 
     },
     { 
       name: "FRIEND"
     }
   ]
  }
 }
}

这将返回枚举的名称及其所有值。 要使用这些值,请在查询枚举时将它们存储在变量中。

PermissionsList = data.__type.enumValues

如果您需要在用户对象ref this中使用枚举

如果您使用阿波罗服务器,请阅读apollo-servergraphql-tools

答案 1 :(得分:0)

我不太明白:您提到您只是使用了prisma-binding forwardTo函数,但随后提供了示例查询,您可以在其中使用{{ 1}}。两种情况下都有问题吗?

对于db实例,我不知道答案。但是对于第二种情况,我也遇到了这个问题,并且能够通过将解析器函数签名中的ctx.db.query.user对象作为查询的第二个参数传递来解决它。

forwardTo