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

Graphql 为什么我的查询不返回枚举数组,graphql,apollo-server,prisma,Graphql,Apollo Server,Prisma,我在GraphQL查询中查询枚举数组时遇到一些问题。我希望将根据类型随用户返回数组或权限 奇怪的是,当我在操场上进行相同的查询时(对于我的Prisma或Apollo服务器),我确实得到了阵列 我的查询如下所示: const user = await ctx.db.query.user({ where: { id: ctx.userId } }); type User { id: ID! @id name: String! email: String! @

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

奇怪的是,当我在操场上进行相同的查询时(对于我的Prisma或Apollo服务器),我确实得到了阵列

我的查询如下所示:

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
}
我的类型定义如下所示:

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”将其转发给DB

但是用户的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' }
因此不包括权限数组。

系统此自省类型

  • __模式
  • __类型
  • __打字机
  • __场
  • __输入值
  • __枚举值
  • __指示
  • 要查询枚举,需要使用_类型查询解析器

    enum Permission {
        ADMIN
        CLUB_ADMIN
        USER
        FRIEND
    }
    
    查询枚举

    query 
    {
     __type(name: "Permission") {
       name
       enumValues {
         name
       }
     }
    }
    
    类型查询解析器需要name参数。此参数允许您根据对象和枚举的名称搜索模式中的项

    {
     "data": {
       "__type": {
       "name": "Permission", 
       "enumValues" : [
         {
           name: "ADMIN" 
         },
         { 
           name: "CLUB_ADMIN" 
         },
         { 
           name: "USER" 
         },
         { 
           name: "FRIEND"
         }
       ]
      }
     }
    }
    
    这将返回枚举的名称及其所有值。 要使用这些值,请在查询枚举时将其存储在变量中

    PermissionsList = data.__type.enumValues
    
    如果需要用户对象内部的枚举

    如果您使用apollo server,请阅读和系统此自省类型

  • __模式
  • __类型
  • __打字机
  • __场
  • __输入值
  • __枚举值
  • __指示
  • 要查询枚举,需要使用_类型查询解析器

    enum Permission {
        ADMIN
        CLUB_ADMIN
        USER
        FRIEND
    }
    
    查询枚举

    query 
    {
     __type(name: "Permission") {
       name
       enumValues {
         name
       }
     }
    }
    
    类型查询解析器需要name参数。此参数允许您根据对象和枚举的名称搜索模式中的项

    {
     "data": {
       "__type": {
       "name": "Permission", 
       "enumValues" : [
         {
           name: "ADMIN" 
         },
         { 
           name: "CLUB_ADMIN" 
         },
         { 
           name: "USER" 
         },
         { 
           name: "FRIEND"
         }
       ]
      }
     }
    }
    
    这将返回枚举的名称及其所有值。 要使用这些值,请在查询枚举时将其存储在变量中

    PermissionsList = data.__type.enumValues
    
    如果需要用户对象内部的枚举


    如果您使用apollo server,请阅读和

    我不太明白:您提到您只是使用了
    prisma绑定
    转发
    功能,但随后提供了示例查询,您可以使用
    ctx.db.query.user从上下文转发到
    db
    。这两种情况下你都有问题吗

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

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

    我不太明白:您提到您只是简单地使用了
    prisma binding
    forwardTo
    功能,但随后使用
    ctx.db.query.user
    提供示例查询,从上下文转发到
    db
    。这两种情况下你都有问题吗

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

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

    如果它在操场上工作,那么它就工作了,所以问题一定是您的客户端查询。为什么用户拥有一系列权限?一个用户不会有一种权限类型吗?每个权限都与不同的权限集相关,可以是用户,也可以是俱乐部管理员、管理员等。我还没有进入客户端查询。这只是查询prisma db和Apollo server db,查询直接取自生成的模式。我认为,当使用枚举数组创建记录时,您必须使用一个“集合”,我是否需要显式地“获取”数组的内容?如果需要,游乐场如何工作?遇到了同样的问题。我还没有找到它的修复方法,但是如果你想返回permissions字段,你需要将它作为一个返回字段传入,还需要将
    info
    对象作为
    ctx.db.query.user
    函数的第二个参数传入,如果它在游戏场中工作,那么问题一定是你的客户端查询。为什么用户拥有一系列权限?一个用户不会有一种权限类型吗?每个权限都与不同的权限集相关,可以是用户,也可以是俱乐部管理员、管理员等。我还没有进入客户端查询。这只是查询prisma db和Apollo server db,查询直接取自生成的模式。我认为,当使用枚举数组创建记录时,您必须使用一个“集合”,我是否需要显式地“获取”数组的内容?如果需要,游乐场如何工作?遇到了同样的问题。我还没有找到修复程序,但是如果您希望返回权限字段,则需要将其作为返回字段传入,并将
    info
    对象作为第二个参数传递给
    ctx.db.query.user
    函数这是为了获取特定用户的权限数组还是为了反思枚举的可能值?现在,您可以返回枚举。如果需要获取特定用户的权限,可以返回数组。请检查您的查询解析器并返回。这是为了获取特定用户的权限数组,还是为了反思枚举的可能值?现在,您可以返回枚举。如果需要获取特定用户的权限,可以返回数组。请检查您的查询解析器并返回。