0

我正在尝试找到与某个枚举匹配的结果,这是我的type

type User {
  id: ID! @id
  fname:String!
  lname:String!
  email:String! @unique
  password: String
  school_ID: String #@relation(Link: INLINE)
  role: [Role] @scalarList(strategy: RELATION)
  resetToken: String
  resetTokenExpiry: String
}

我可以搜索电子邮件,因为它有它的@unique密钥,但它Role是一个枚举,我不能@unique向它添加密钥,这是有道理的,因为结果不会是唯一的。

但是我不断收到此消息:

“变量 \"$_v0_where\" 的值无效 {\"role\":\"TEACHER\"};字段 \"role\" 未由 UserWhereUniqueInput 类型定义。”

如果我想使用电子邮件查找项目,使用电子邮件可以得到我想要的结果。

我所追求的是获得与所选枚举结果匹配的所有对象的数组返回。

在我的架构中,我有这个:

users: [User]!
user(where: UserWhereInput!): User
findUser(role: Role, id: ID, email: String): User

在我的查询解析器中,我正在使用以下内容:

  users: forwardTo('db'),
  user: forwardTo('db'),

  async findUser(parent, args, ctx, info) {
    return ctx.db.query.user({
      where: {email: args.email, id: args.id, role: args.role}
    }, info)
  },

我正在使用 prisma (1.17.1) 生成我的模式

如何更改我的代码或findUser函数以提供我想要的结果?

4

1 回答 1

0

您正在使用ctx.db.query.user具有以下签名的函数:

user: (where: UserWhereUniqueInput) => UserNullablePromise;

如您所见,它需要UserWhereUniqueInput类型 where 条件。为什么?因为用户函数应该总是只返回一个不同的唯一对象。另一方面还有一个ctx.db.query.users功能:

  users: (args?: {
    where?: UserWhereInput;
    orderBy?: UserOrderByInput;
    skip?: Int;
    after?: String;
    before?: String;
    first?: Int;
    last?: Int;
  }) => FragmentableArray<User>;

如您所见,此函数具有更多选项并用于UserWhereInput定义 where 条件。这还将包括用户在您的案例中的角色。此函数可以返回多个对象,并由您进行相应的过滤/处理。

提示:您也可以自己检查生成的 prisma 客户端。路径通常类似于src\generated\prisma-client\index.ts. 在那里你可以看到所有函数的接口定义,UserWhereUniqueInput以及UserWhereInput例子。通过这种方式,您可以检查什么是可能的,什么是不可能的。

于 2020-02-10T09:49:31.610 回答