Graphql 为什么我的查询不返回枚举数组
我在GraphQL查询中查询枚举数组时遇到一些问题。我希望将根据类型随用户返回数组或权限 奇怪的是,当我在操场上进行相同的查询时(对于我的Prisma或Apollo服务器),我确实得到了阵列 我的查询如下所示: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! @
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
函数这是为了获取特定用户的权限数组还是为了反思枚举的可能值?现在,您可以返回枚举。如果需要获取特定用户的权限,可以返回数组。请检查您的查询解析器并返回。这是为了获取特定用户的权限数组,还是为了反思枚举的可能值?现在,您可以返回枚举。如果需要获取特定用户的权限,可以返回数组。请检查您的查询解析器并返回。